2012-02-01 13 views
12

के साथ बाल तत्व युक्त तत्व प्राप्त होता है। मैं "ली" तत्व में कक्षा जोड़ने के लिए Jquery का उपयोग करना चाहता हूं जिसमें शून्य के बराबर HTML/वैल के साथ "अवधि" तत्व होता है।Jquery को विशिष्ट HTML मान

उदाहरण के लिए मेरी कोड इस तरह दिखता है:

<ul> 
    <li><span>Item 1</span><span class="num">30</span></li> 
    <li><span>Item 2</span><span class="num">0</span></li> 
    <li><span>Item 3</span><span class="num">20</span></li> 
</ul> 

मैं निम्नलिखित करने के लिए इसे बदलना चाहते हैं:

<ul> 
    <li><span>Item 1</span><span class="num">30</span></li> 
    <li class="disabled"><span>Item 2</span><span class="num">0</span></li> 
    <li><span>Item 3</span><span class="num">20</span></li> 
</ul> 

अतीत में मैं तत्वों विशेषता मान की जाँच करने के कोड का इस्तेमाल किया है, लेकिन कभी भी उनके एचटीएमएल/वैल इस प्रभाव से कुछ नहीं कर रहे हैं ...

$('li').has('span.num').addClass('disabled'); 

हालांकि इस मामले में परिणाम में:

<ul> 
    <li class="disabled"><span>Item 1</span><span class="num">30</span></li> 
    <li class="disabled"><span>Item 2</span><span class="num">0</span></li> 
    <li class="disabled"><span>Item 3</span><span class="num">20</span></li> 
</ul> 

है कौन सा स्पष्ट रूप से नहीं काम से जा रहा ... धन्यवाद

+2

आप अक्षम वर्ग के बजाय चयनित कक्षा क्यों जोड़ते हैं ?? – palAlaa

+0

क्योंकि हम आइटम अक्षम कर रहे हैं, उपयोगकर्ता द्वारा कुछ भी नहीं चुना जा रहा है। –

उत्तर

15

यह आप क्या चाहते हैं क्या करना चाहिए।

$('li').each(function(){ 
    if($(this).find('span.num').text() == '0') $(this).addClass('disabled') 
}); 

JS Fiddle

मैं निम्नलिखित सुझाव दिया है |:

$('li').has('span.num:contains(0)').addClass('disabled') 

लेकिन यह काम नहीं करता है, के रूप में यह जाँच करता है, तो मूल्य एचटीएमएल अंदर मौजूद है - सटीक मिलान के लिए नहीं। इस मामले में, span.num तत्वों में से प्रत्येक में 0 है, इसलिए प्रत्येक ली को चयनित कक्षा मिल जाएगी। ऐसा प्रतीत नहीं होता है: बराबर() समकक्ष: इसमें() चयनकर्ता शामिल है।

+0

यह बहुत अच्छा काम करता है। धन्यवाद –

+0

मैं .has और "include" का उपयोग करके अतिरिक्त टिप्पणी की सराहना करता हूं। यही वह दृष्टिकोण है जिसे मैं लेने की उम्मीद कर रहा था। शायद यह संभव नहीं है, लेकिन कौन जानता है कि मुझे भविष्य में ऐसा कुछ चाहिए। –

2

प्रयास करें:

$('li span.num').filter(
    function(i){ 
     return $(this).text() == '0'; 
    }).closest('li').addClass('selected'); 

JS Fiddle demo

+2

यह ओपी द्वारा आवश्यक आउटपुट उत्पन्न नहीं करेगा। – ShankarSangoli

+0

आप $ (यह) क्यों लौट रहे हैं और सच या गलत नहीं हैं? – gdoron

+0

@ शंकरसंगोली: ओह। हां आप ठीक हैं। किसी कारण से मैंने सोचा कि वह '30' अवधि चाहता था। धन्यवाद! और संपादित! =) –

5

इसे आजमाएं।

$('ul span.num').filter(function(){ 
    return $(this).text() == "0"; 
}).parent().addClass('disabled'); 

Demo

+0

मैंने तुरंत इसे नहीं देखा, लेकिन यह बहुत अच्छा काम करता है तो +1। –

+0

क्या फिल्टर बनाम का उपयोग कर कोई प्रदर्शन लाभ है।से प्रत्येक? –

+1

'फ़िल्टर' और 'प्रत्येक' का उपयोग 2 अलग-अलग परिचालनों के लिए किया जाता है। जब आप किसी भी शर्त के आधार पर तत्वों के मिलान किए गए सेट को फ़िल्टर करना चाहते हैं तो आप 'फ़िल्टर' का उपयोग करते हैं, जहां' प्रत्येक' तत्वों के सभी मिलान किए गए सेट के माध्यम से लूप करने के लिए उपयोग किया जाता है और उन पर कोई भी संचालन करता है। आपके मामले में 'फ़िल्टर' सबसे अच्छा फिट बैठता है क्योंकि आप तत्वों को फ़िल्टर करना चाहते हैं (टेक्स्ट == 0) और आवश्यक वर्ग (डिसबल्ड) लागू करें। – ShankarSangoli

0

आप filter() साथ <span> तत्व से मेल कर सकते हैं, तो parent() साथ अपनी मूल <div> मिलती है:

$("li > span.num").filter(function() { 
    return $(this).text() === "0"; 
}).parent().addClass("disabled"); 
+0

'span.num' के बाहर के पाठ में 'span' जोड़ने के बारे में क्या? – ShankarSangoli

+0

क्या आपका मतलब 'आइटम 1' जैसा टेक्स्ट है? प्रश्नकर्ता के मार्कअप में इनके आसपास के तत्व पहले से ही 'तत्व हैं। क्या मैं कुछ भूल रहा हूँ? –

+0

ओह हाँ, आप सही हैं: पी – ShankarSangoli

0

यहाँ यह करने के लिए के लिए एक तेज तरीका है:

$('li .num').each(function(){ 
    if ($(this).text() == '0') $(this).parent().addClass('disabled'); 
}); 
एक jsFiddle example साथ

संबंधित मुद्दे