2009-05-15 32 views
12

के साथ किसी तत्व के अगले भाई को छुपाएं मेरे पास document.getElementById('the_id') से एक तत्व प्राप्त हुआ है। मैं अपने अगले भाई को कैसे प्राप्त कर सकता हूं और इसे छुपा सकता हूं? मैंने कोशिश की लेकिन यह काम नहीं किया:जावास्क्रिप्ट

elem.nextSibling.style.display = 'none'; 

फायरबग त्रुटि elem.nextSibling.style is undefined थी।

उत्तर

34

ऐसा इसलिए है क्योंकि फ़ायरफ़ॉक्स तत्व नोड्स के बीच व्हाइटस्पेस को टेक्स्ट नोड्स (जबकि आईई नहीं करता) मानता है और इसलिए किसी तत्व पर .nextSibling का उपयोग करके फ़ायरफ़ॉक्स में टेक्स्ट नोड प्राप्त होता है।

अगले तत्व नोड प्राप्त करने के लिए उपयोग करने के लिए एक फ़ंक्शन होना उपयोगी है। इस

/* 
    Credit to John Resig for this function 
    taken from Pro JavaScript techniques 
*/ 
function next(elem) { 
    do { 
     elem = elem.nextSibling; 
    } while (elem && elem.nodeType !== 1); 
    return elem;   
} 

की तरह कुछ तो आप

var elem = document.getElementById('the_id'); 
var nextElem = next(elem); 

if (nextElem) 
    nextElem.style.display = 'none'; 
+0

लेकिन 'elem' अभी भी अशक्त हो सकता है बचा जाता है। – Gumbo

+0

नहीं, ऐसा नहीं है। यह सिर्फ गारेट करता है कि 'elem'" सत्य नहीं है "या 'elem.nodeType == 1' जब' अगली सिब्लिंग 'का उपयोग नहीं किया जाता है। लेकिन अगर ऐसा कोई तत्व नहीं है, तो 'elem' केवल आखिरी भाई नोड है चाहे वह किस प्रकार है। – Gumbo

+0

यहां एक उदाहरण दिया गया है: var elem = document.createElement ("div"); elem.appendChild (document.createTextNode ("foo")); elem.appendChild (document.createTextNode ("बार")); अलर्ट (अगला (elem.firstChild) === शून्य); // "सच" – Gumbo

2

Firebug त्रुटि कर सकते हैं elem.nextSibling.style अपरिभाषित है था।

क्योंकि nextSibling एक पाठ नोड या अन्य नोड प्रकार किया जा सकता है

do { 
    elem = elem.nextSibling; 
} while(element && elem.nodeType !== 1); // 1 == Node.ELEMENT_NODE 
if(elem) elem.style.display = 'none'; 
+0

+1 'शैली' विशेषता तक पहुंचने से पहले 'elem' शून्य नहीं है, यह जांचने के लिए। इस जवाब को जोड़ने के लिए – Gumbo

0

की तरह कुछ का उपयोग कर इस तत्व के बच्चों के माध्यम से पाशन का प्रयास करें: करने के लिए उचित सुधार

var i=0; 
(foreach child in elem) 
{ 
    if (i==0) 
    { 
    document.getElementByID(child.id).style.display='none'; 
    } 
} 

कृपया सुनिश्चित वाक्य - विन्यास।

8

Element Traversal API पर एक नज़र डालें, यह एपीआई केवल एलिमेंट नोड्स के बीच चलता है। यह निम्न की अनुमति देता है:

elem.nextElementSibling.style.display = 'none'; 

और इस तरह समस्या संभावित हो रही गैर तत्व नोड्स (जैसे TextNode पकड़े खाली स्थान के) के nextSibling में निहित

+0

TY TY TY TY! – Alisso

+0

मुझे लगता है कि यह सबसे अच्छा और आसान तरीका है जिसे मैं समझ नहीं पा रहा हूं कि लोगों ने क्यों ध्यान केंद्रित नहीं किया .. –

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