2010-04-27 9 views
8

मैं जावास्क्रिप्ट में संदर्भित तत्व को दस्तावेज़ में डाला गया है या नहीं, तो मैं जावास्क्रिप्ट के साथ कैसे खोज सकता हूं।यदि जावा डीओएम में मौजूद है या यह वर्चुअल (केवल createElement द्वारा बनाया गया है)

निम्न कोड के साथ एक मामले को वर्णन करने देता है:

var elem = document.createElement('div'); 

// Element has not been inserted in the document, i.e. not present 

document.getElementByTagName('body')[0].appendChild(elem); 

// Element can now be found in the DOM tree 

Jquery है: दिखाई चयनकर्ता, लेकिन यह सही परिणाम नहीं देंगे जब मैं दस्तावेज़ में कहीं रखा गया है कि अदृश्य तत्व खोजने की जरूरत है।

उत्तर

13

यहाँ एक आसान विधि मानक Node.contains DOM API का उपयोग करता है एक तत्व में जांच करने के लिए डोम में है है IE में दस्तावेज़ वस्तु एक विधि नहीं है - क्रॉस-ब्राउज़र संगतता सुनिश्चित करने के लिए, इसके बजाय document.body.contains() का उपयोग करें। (या document.head.contains यदि आप लिंक, स्क्रिप्ट, आदि जैसे तत्वों के लिए जाँच कर रहे हैं) एक विशिष्ट document संदर्भ बनाम नोड-स्तर के प्रयोग पर

 


 

नोट्स ownerDocument:

किसी ने दस्तावेज़ में नोड की उपस्थिति की जांच के लिए MY_ELEMENT.ownerDocument.contains(MY_ELEMENT) का उपयोग करने का विचार उठाया। जबकि यह लक्षित परिणाम उत्पन्न कर सकता है (हालांकि, 99% मामलों में आवश्यक से अधिक वर्बोसिटी के साथ), यह उपयोग-मामले के आधार पर अप्रत्याशित परिणाम भी ले सकता है। के बारे में क्यों बात करते हैं:

आप एक नोड है कि वर्तमान में, एक अलग दस्तावेज में रहता है document.implementation.createHTMLDocument() साथ उत्पन्न एक की तरह, एक दस्तावेज़, या एक HTML आयात दस्तावेज़ के साथ काम कर रहे हैं, तो और उपस्थिति के लिए जाँच करने के लिए नोड के ownerDocument संपत्ति का उपयोग आप में क्या सोचते हैं आपका मुख्य, दृश्यमान रूप से document होगा, आप चोट की दुनिया में होंगे।

नोड संपत्ति ownerDocument बस जो कुछ वर्तमान दस्तावेज़ नोड में रहता है के लिए सूचक है। लगभग contains के हर यूज-केस एक विशिष्ट एक नोड की उपस्थिति के लिए document जाँच शामिल है। आपके पास 0 गारंटी है कि ownerDocument वही दस्तावेज़ है जिसे आप देखना चाहते हैं - केवल आप ही उसे जानते हैं। ownerDocument का खतरा यह है कि कोई अन्य दस्तावेजों में रहने वाले नोड्स को संदर्भित करने, आयात करने या उत्पन्न करने के कई तरीकों को पेश कर सकता है।यदि वे ऐसा करते हैं, और आपने ownerDocument के सापेक्ष अनुमान पर भरोसा करने के लिए अपना कोड लिखा है, तो आपका कोड टूट सकता है। यह सुनिश्चित करने के लिए कि आपका कोड हमेशा अपेक्षित परिणाम उत्पन्न करता है, आपको केवल के विरुद्ध तुलना करना चाहिए, विशेष रूप से संदर्भितdocument जिसे आप जांचना चाहते हैं, ownerDocument जैसे सापेक्ष संदर्भों पर भरोसा न करें।

+0

टिप्पणियां विस्तारित चर्चा के लिए नहीं हैं; यह वार्तालाप [चैट करने के लिए स्थानांतरित हो गया है] (http://chat.stackoverflow.com/rooms/66649/discussion-on-answer-by-csuwldcat-how-to-find-with-javascript-if-element-exists) । – Taryn

14

यह करें:

var elem = document.createElement('div'); 
elem.setAttribute('id', 'my_new_div'); 

if (document.getElementById('my_new_div')) { } //element exists in the document. 
+0

धन्यवाद संभोग, मैं मन में यह था, लेकिन आईडी टक्कर होने की संभावना से उलझन में था। मिनट पहले मैंने तत्व के मूल var की जांच करके नई विधि विकसित की थी। यह निश्चित रूप से नया नहीं है और मुझे आश्चर्य है कि मैंने इसे पहले नहीं समझा है। – mpontus

1

सबसे सुरक्षित तरीका सीधे परीक्षण करने के लिए है कि क्या तत्व दस्तावेज़ में निहित है:

function isInDocument(el) { 
    var html = document.body.parentNode; 
    while (el) { 
     if (el === html) { 
      return true; 
     } 
     el = el.parentNode; 
    } 
    return false; 
} 

var elem = document.createElement('div'); 
alert(isInDocument(elem)); 
document.body.appendChild(elem); 
alert(isInDocument(elem)); 
-1

उपयोग compareDocumentPosition अगर तत्व document अंदर निहित है देखने के लिए। PPK में ब्राउज़र संगतता विवरण है और John Resig आईई के लिए एक संस्करण है।

document.body.contains(MY_ElEMENT); 

क्रॉस-ब्राउज़र नोट:

+0

मैंने 'comparDocumentPosition' का उपयोग करने के बारे में भी सोचा था, लेकिन सभी ब्राउज़रों में काम करने के लिए चारों ओर गड़बड़ करना वास्तव में इसके लायक नहीं है जब आप नोड पेड़ को चलने के समान सरल काम कर सकते हैं, जैसा कि मेरे उत्तर में होगा, जो हर ब्राउज़र में बहुत ज्यादा काम करते हैं। –

-1
function isInDocument(query){ 
    return document.querySelectorAll(query).length != 0; 
} 
// isInDocument("#elemid") 
+0

इस प्रश्न का 7 साल पहले उत्तर दिया गया था। हो सकता है कि आप इस बारे में विस्तृत करना चाहते हैं कि मूल रूप से उत्तर देने के बाद आज आपका उत्तर अधिक सटीक कैसे है? विवरण के बिना बस कुछ कोड पोस्ट न करें, https://stackoverflow.com/help/how-to-answer देखें। – migg

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