2010-08-12 27 views
8

मैं कुछ जानकारी के लिए डेटाबेस के रूप में नेस्टेड एचटीएमएल अनॉर्डर्ड सूचियों की संरचना लेने की कोशिश कर रहा हूं ताकि व्यवस्थित करने और विश्लेषण करने की आवश्यकता हो। मैं jQuery का उपयोग कर जानकारी को फ़िल्टर करने, गिनने और प्रस्तुत करने की कोशिश कर रहा हूं। मैं सूचियों के लिए प्रयास कर रहा हूं कि कोई कक्षा या आईडी विशेषता न हो, ताकि वे बहुत साफ हो जाएं। कैसे मुझे लगता है कि ली के बच्चे और पोते उल के (अर्थात अपने उप-सूचियों) में पाठ का चयन बिना एक ली के तत्काल बच्चे को पाठ नोड का चयन कर सकते हैं:Jquery - बच्चों को उल के पाठ का चयन किये बिना तत्काल ली टेक्स्ट का चयन करें

<ul id="root"> 
<li> First first-level element 
    <ul> 
    <li> First second-level element 
     <ul> 
     <li>First Third-level element</li> 
     <li>Second Third-level element</li> 
     </ul> 
    </li> 
    <li> Second second-level element 
     <ul> 
     <li>Third Third-level element</li> 
     <li>Fourth Third-level element</li> 
     </ul> 
    </li> 
    </ul> 
</li> 
<li> Second first-level element 
    <ul> 
    <li> Third second-level element 
     <ul> 
     <li>Fifth Third-level element</li> 
     </ul> 
    </li> 
    </ul> 
</li> 
</ul> 

मेरा प्रश्न है: केवल जड़ कक्षा या इस तरह आईडी होना चाहते हैं?

  • पहले दूसरे स्तर के तत्व
  • दूसरा दूसरे स्तर के तत्व
  • : उदाहरण के लिए, ऊपर एचटीएमएल सूची दी, मैं दूसरे स्तर में सभी पाठ नोड्स की एक सूची के साथ आने के लिए सक्षम होना चाहते हैं
  • तीसरा दूसरे स्तर के तत्व

या तीसरे स्तर ... आदि जो मुझे सूची और किसी दिए गए स्तर में आइटम गिनती करने की अनुमति होगी से सभी पाठ। सबसे नज़दीक मैं गया हूं:

// to select items in second but not third level 
$('ul#root ul').not('ul#root ul ul').children('li') 

लेकिन यह एक लचीला समाधान नहीं है। क्या होगा यदि सूची में कई स्तर हैं, तो सात कहें? छठे स्तर का चयन करने के लिए आपको कुछ ऐसा करना होगा:

// to select items in second but not third level 
$('ul#root ul ul ul ul ul').not('ul#root ul ul ul ul ul ul').children('li') 

एक और तरीका होना चाहिए लेकिन मुझे यह नहीं मिला है। आपके सुझावों का स्वागत है। तीसरे आप 2 को eq सेट क्योंकि इसके अनुक्रमण 0 से शुरू होता है के लिए

$('ul#root > ul > li').eq(1) 

:

+0

कोई समाचार यहां ?? – headkit

उत्तर

1

आप दूसरी ली जैसे <li> Second second-level element का चयन करना चाहते हैं, तो आप > बच्चे चयनकर्ता eq इस तरह से उपयोग कर सकते हैं।

$('ul#root > ul > li').eq(1).each(function(){ 
    alert($(this).text()); 
}); 

अधिक जानकारी:

उन पर पाश के लिए, आपको each इस तरह उपयोग कर सकते हैं

+0

यह काम नहीं करता है। इसके अलावा, चयनकर्ता में एक ली गायब था। यदि मैं li: $ ('ul # root> li> ul> li')। Eq (1) .each (function() { अलर्ट ($ (यह) .text()); }) ; मुझे अभी भी ली के बच्चों के uls के भीतर सभी पाठ मिलते हैं। मुझे लगता है कि ऐसा इसलिए है क्योंकि जब आप इसे "प्रत्येक" लूप पर प्राप्त करते हैं तो ली वास्तव में बच्चे uls होता है। मैं इसे लूप के अंदर लाने की कोशिश करूंगा। कोई अन्य विचार? धन्यवाद। – Froilan

4

यहाँ कहा गया है : एक के बाद यह outputs तीसरे स्तर तत्वों एक:

$('ul#root > li > ul > li > ul').children('li').each(function(){ 
    alert($(this)[0].firstChild.textContent); 
}); 

jQuery: Find the text of a list item that contains a nested ul

तो यह एक समाधान है "सामान्य डोम तरीकों सिर्फ एक तत्व के लिए पाठ सामग्री का उपयोग करने की अनुमति" यह दूसरे स्तर के तत्वों को आउटपुट करता है:

$('ul#root > li > ul').children('li').each(function(){ 
    alert($(this)[0].firstChild.textContent); 
}); 

इस आउटपुट प्रथम स्तर तत्वों:

$('ul#root').children('li').each(function(){ 
    alert($(this)[0].firstChild.textContent); 
}); 
+0

मुझे यकीन नहीं है कि 'टेक्स्टकंटेंट' पूर्व IE-9 http://www.quirksmode.org/dom/w3c_html.html पर काम करेगा –

0

एक और अधिक मजबूत विधि के प्रकार के साथ ट्रेवर्सल "सामग्री" का चयन करें और नोड का उपयोग करने के लिए है (3) जो HTML में एक पाठ चाइल्ड तत्व के लिए नोड प्रकार है। उदाहरण के लिए:

$('ul#root > li > ul > li > ul').children('li').contents().each(function() { 
    if (this.nodeType == 3) alert(this.nodeValue); 
});