2009-06-10 20 views
75

में केवल प्रथम स्तर तत्वों मैं इस तरह एक सूची से केवल माता-पिता <ul> का लिंक तत्व का चयन कैसे कर सकते हैं?चयन jQuery

<ul> 
<li><a href="#">Link</a></li> 
<li><a href="#">Link</a> 
    <ul> 
    <li><a href="#">Link</a></li> 
    <li><a href="#">Link</a></li> 
    <li><a href="#">Link</a></li> 
    <li><a href="#">Link</a></li> 
    <li><a href="#">Link</a></li> 
    </ul> 
</li> 
<li><a href="#">Link</a></li> 
<li><a href="#">Link</a></li> 
<li><a href="#">Link</a></li> 

सीएसएस ul li a में

तो, लेकिन नहीं ul li ul li a

धन्यवाद

उत्तर

88
$("ul > li a") 

लेकिन आप रूट उल पर एक वर्ग सेट करना होगा यदि आप विशेष रूप से लक्षित करना चाहते हैं बाहरीतम उल:

<ul class="rootlist"> 
... 

तो यह है:

$("ul.rootlist > li a").... 

सुनिश्चित करें कि आप केवल रूट ली तत्व बनाने का एक और तरीका है:

$("ul > li a").not("ul li ul a") 

यह kludgy लग रहा है, लेकिन यह चाल

+0

हम्म यह केवल प्रथम स्तर यह एक युक्त jQuery वस्तु का सामना करना पड़ता है का चयन करेंगे मैंने पाया कि मेरी समस्या jquery 1.2 का उपयोग कर थी। मैंने इसे 1.3 के साथ बदल दिया है और इस तरह के चयनकर्ता अभी ठीक काम कर रहे हैं। आपके उत्तर और उत्तर देने वाले सभी के लिए बहुत बहुत धन्यवाद। – aston

+0

यदि आप कक्षा नहीं जोड़ना चाहते हैं तो बस $ ("ul: first> li a") करें, जाहिर है यह केवल पहले स्तर के लिए काम करेगा, आंतरिक स्तर पर नहीं। – Alfonso

+0

$ ("उल> ली ए") नहीं। ("उल ली उल ए") यह ठीक काम कर रहा है। – vicky

44

एक बार जब आप है क्या करना चाहिए प्रारंभिक उल, आप children() विधि का उपयोग कर सकते हैं, जो केवल तत्व के तत्काल बच्चों पर विचार करेगा। जैसा कि @activa बताता है, रूट तत्व को आसानी से चुनने का एक तरीका यह है कि इसे कक्षा या आईडी दें। निम्नलिखित मानते हैं कि आपके पास आईडी root आईडी के साथ रूट उल है।

$('ul#root').children('li'); 
+1

धन्यवाद, यह मेरे लिए बहुत उपयोगी है। एक '$ ('उल')। पहला()। बच्चे ('ली')' –

0

आप यूएल के प्रत्यक्ष बच्चों को केवल $("ul li:first-child") का उपयोग भी कर सकते हैं।

मैं हालांकि इस बात से सहमत हैं, तो आप एक आईडी या कुछ और की जरूरत है अन्यथा मुख्य यूएल पहचान करने के लिए यह सिर्फ उन सब का चयन करेंगे। आप यूएल के चारों ओर एक आईडी के साथ एक div था ऐसा करने के लिए सबसे आसान काम हो जाएगा $("#someDiv > ul > li")

+2

का भी उपयोग किया जा सकता है यह ': प्रथम-बच्चे 'का गलत उपयोग है। यह प्रत्येक 'उल' के "पहले 'li' का चयन करेगा। मूल पोस्ट पहले 'उल' से "हर' li' मांग रहा था। " –

-1
.add_to_cart >>> .form-item:eq(1) 

दूसरा .add_to_cart से पेड़ स्तर बच्चे को .form-आइटम

+0

यह प्रश्न – renke

3

आप इस प्रयास करना चाहें यदि परिणाम अभी भी बच्चों के लिए बहते हैं, तो कई मामलों में JQuery अभी भी बच्चों पर लागू होगा।

$("ul.rootlist > li > a") 

इस विधि का उपयोग करना: ई> एफ किसी भी एफ तत्व यह है कि एक तत्व ई

बताता JQuery केवल स्पष्ट बच्चों के लिए देखने के लिए का एक बच्चा है मेल खाता है। http://www.w3.org/TR/CSS2/selector.html

+0

पर भी समझ में नहीं आता है यह वास्तव में –

7

के रूप में अन्य उत्तर में कहा गया है, सरल विधि विशिष्ट (आईडी या वर्ग के नाम से) मूल तत्व की पहचान करने और प्रत्यक्ष वंशज का भी उपयोग कर रहा है।

$('ul.topMenu > li > a') 

हालांकि, मैं एक समाधान है जो अलग गहराई डोम की पर अज्ञात तत्वों पर काम करेगा की तलाश में इस सवाल बारे में जाना।

यह प्रत्येक तत्व की जाँच, और यह सुनिश्चित करना है कि यह मेल नहीं खाते तत्वों की सूची में एक जनक नहीं है के द्वारा प्राप्त किया जा सकता है।यहां एक jQuery चयनकर्ता 'टॉपस्टो' में लपेटा गया मेरा solution है।

jQuery.extend(jQuery.expr[':'], { 
    topmost: function (e, index, match, array) { 
    for (var i = 0; i < array.length; i++) { 
     if (array[i] !== false && $(e).parents().index(array[i]) >= 0) { 
     return false; 
     } 
    } 
    return true; 
    } 
}); 

इस का उपयोग, मूल पोस्ट का हल है:

$('ul:topmost > li > a') 

// Or, more simply: 
$('li:topmost > a') 

पूरा jsFiddle उपलब्ध here

+0

काम करता है यहां बहुत अच्छा काम करता है! –

+0

नए डीओएम विधियों का उपयोग करके आप नाटकीय रूप से ': topmost' के प्रदर्शन में सुधार कर सकते हैं -' .parentElement.closest (selector) 'का उपयोग करने का प्रयास करें। हमेशा के रूप में, आईई + एज केवल एक ही हैं जो इसका समर्थन नहीं करते हैं: :-(तो यहां एक पॉलीफिल है http://pastebin.com/JNBk77Vm – oriadam

0

इस प्रयास करें:

$("#myId > UL > LI") 
0

मैं किसी भी गहराई से नेस्टेड वर्गों के साथ कुछ परेशानी थी, इसलिए मैं इस पता लगा।

var $elementsAll = $("#container").find(".fooClass");4 
 

 
var $levelOneElements = $elementsAll.not($elementsAll.children().find($elementsAll)); 
 

 
$levelOneElements.css({"color":"red"})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div class="fooClass" style="color:black"> 
 
Container 
 
    <div id="container"> 
 
    <div class="fooClass" style="color:black"> 
 
     Level One 
 
     <div> 
 
     <div class="fooClass" style="color:black"> 
 
      Level Two 
 
     </div> 
 
     </div> 
 
    </div> 
 
    <div class="fooClass" style="color:black"> 
 
     Level One 
 
     <div> 
 
     <div class="fooClass" style="color:black"> 
 
      Level Two 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

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