2010-10-29 11 views
11

क्या कोई मुझे दिखा सकता है कि एक div के भीतर एंकर टैग के माध्यम से लूप कैसे करें और अगले भाई को ढूंढें?जावास्क्रिप्ट अगली भाई?

मेरे पास अब तक यह है।

var menu = document.getElementById('menu'); 
var links = menu.getElementsByTagName('a'); 

मैं लिंक के माध्यम से कैसे लूप करूं? क्या मैं .nextSibling का उपयोग यह पता लगाने के लिए कर सकता हूं कि अगला भाई एक div है या नहीं?

+1

बेहतर होगा कि तुम कुछ JavaScrip पुस्तकालय, उदाहरण के – infinity

+0

के लिए jQuery मैं नहीं कर सकते हैं इस स्थिति में, आम तौर पर मैं होता उपयोग करेंगे: निम्नलिखित है कि क्या करेंगे। यह सिर्फ इस तरह के पुस्तकालयों पर मेरी निर्भरता दिखाता है ... – JasonS

+2

क्या अगले भाई? –

उत्तर

17

डोम की nextSibling संपत्ति सभी ब्राउज़रों में पूरी तरह से काम करता है नोड है और वास्तव में आपकी आशा करता है। यदि कोई अगला भाई नहीं है, तो यह null देता है।

एक NodeList से अधिक पुनरावृत्ति (जो क्या getElementsByTagName रिटर्न) एक सरणी एक मानक for पाश का उपयोग करने पर पुनरावृत्ति के समान है। निम्नलिखित लिंक पर पुनरावृति और हर बार यह होता है जिसका अगले भाई है पाता सूचित करेंगे एक <div>:

var menu = document.getElementById('menu'); 
var links = menu.getElementsByTagName('a'); 

// Iterate over the links 
for (var i = 0, len = links.length, link; i < len; ++i) { 
    link = links[i]; 
    if (link.nextSibling && link.nextSibling.nodeName == "DIV") { 
     alert("Next sibling is DIV! " + link.innerHTML); 
    } 
} 

ध्यान दें कि गैर IE में ब्राउज़रों, HTML में तत्वों के बीच खाली स्थान के लिए एक पाठ नोड माना जाता है। प्रत्येक लिंक की अगली भाई क्या है, इस पर विचार करते समय आप इन व्हाइटस्पेस नोड्स को अनदेखा कर सकते हैं।

function isWhitespace(node) { 
    return node.nodeType == 3 && /^\s*$/.test(node.data); 
} 

// Iterate over the links 
for (var i = 0, len = links.length, link, next; i < len; ++i) { 
    link = links[i]; 
    next = link.nextSibling; 
    if (next && isWhitespace(next)) { 
     next = next.nextSibling; 
    } 
    if (next && next.nodeName == "DIV") { 
     alert("Next sibling is DIV! " + link.innerHTML); 
    } 
} 
+0

यह समाधान लगभग सही है। हालांकि, यह ए टैग टेक्स्ट नोड को ध्यान में नहीं लेता है। यहां एक JSFiddle दिखा रहा है: http://www.jsfiddle.net/subhaze/ytCxS/ – subhaze

+0

@subhaze: ठीक है, मुझे लगता है कि आप कह सकते हैं कि यह उस कारण से गलत था, लेकिन एक टेक्स्ट नोड अभी भी कोई भी नोड है अन्य नोड, भले ही इसमें केवल सफेद जगह हो। असली मुद्दा यह है कि आईईई व्हाइटस्पेस टेक्स्ट नोड्स को वास्तविक डोम नोड्स के रूप में नहीं मानता है जबकि अन्य सभी ब्राउज़र करते हैं। यह निश्चित रूप से इंगित करने लायक है, इसलिए मैं अपना जवाब संशोधित करूंगा। –

+0

@ सुभज़: मेरा जवाब संशोधित। मुझे लगता है कि आप केवल व्हाइटस्पेस टेक्स्ट नोड्स को अनदेखा करना चाहते हैं, न कि कोई टेक्स्ट नोड (जैसा कि आपके jsfiddle उदाहरण में)। –

0
for(var i=0; i<links.length; i++) {  
if (links[i].nextChild.nodeName=="DIV") 
    alert("This is a DIV") 
} 
+2

nextChild एक नोड की संपत्ति नहीं है: https://developer.mozilla.org/en/DOM/Node – subhaze

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