2010-07-14 17 views
21

जब मैं यह जांचना चाहता हूं कि किसी पृष्ठ में कोई तत्व मौजूद है या नहीं। क्या ये दोनों एक ही जांचते हैं? क्या अस्तित्व की जांच करने के लिए एक बेहतर और कॉम्पैक्ट तरीका है?अगर (document.getElementById ('कुछ')! = Null) समान है (document.getElementById ('कुछ'))?

यदि मैं value == '' जांचना चाहता हूं तो क्या होगा। क्या इसे इस चेक में भी शामिल किया जा सकता है?

उत्तर

24

किसी तत्व का संदर्भ कभी भी "झूठी" दिखाई नहीं देगा, इसलिए स्पष्ट नल चेक को छोड़ना सुरक्षित है।

जावास्क्रिप्ट false के रूप में बूलियन संदर्भ में कुछ मानों के संदर्भों का संदर्भ देगा: अपरिभाषित, शून्य, संख्यात्मक शून्य और NaN, और खाली तार। लेकिन getElementById रिटर्न या तो एक तत्व संदर्भ होगा, या शून्य। इस प्रकार यदि तत्व डोम में है, तो वापसी मान एक ऑब्जेक्ट संदर्भ होगा, और सभी ऑब्जेक्ट संदर्भ trueif() परीक्षण में हैं। यदि तत्व डीओएम में नहीं है, तो वापसी मूल्य null होगा, और nullif() परीक्षण में हमेशा false होता है।

यह तुलना शामिल करने के लिए हानिरहित है, लेकिन व्यक्तिगत रूप से मैं बाहर कोड के टुकड़े कि कुछ भी नहीं करते क्योंकि मैं हर बार मेरी उंगली कुंजीपटल हिट लगाने मैं एक बग :)

नोट शुरू करने जा सकता है रखना पसंद करते हैं कि jQuery का उपयोग करने वालों ऐसा नहीं चाहिए:

if ($('#something')) { /* ... */ } 

jQuery समारोह हमेशा कुछ "truthy" — भले ही कोई तत्व पाया जाता है वापस आ जाएगी क्योंकि, jQuery एक वस्तु संदर्भ देता है। इसके बजाय:

if ($('#something').length) { /* ... */ } 

संपादित — एक तत्व की मूल्य जाँच करने के लिए के रूप में, नहीं, आपको लगता है कि एक ही समय में आप के साथ तत्व ही के अस्तित्व के लिए जाँच कर रहे हैं के रूप में सीधे नहीं कर सकते डोम विधियों। दोबारा, अधिकांश रूपरेखा अपेक्षाकृत सरल और साफ बनाती हैं, क्योंकि अन्य ने अपने उत्तरों में ध्यान दिया है।

+0

वहाँ भी इस पोस्ट में अच्छा जानकारी का एक बहुत कुछ है। (लेकिन मैं हमेशा आदत से typeof जाँच करने के लिए पसंद करते हैं।) – Andir

+2

इस मामले में "typeof" जाँच हो रही है पूरी तरह से है बेकार क्योंकि 'getElementById' से वापसी मान हमेशा" ऑब्जेक्ट "टाइप किया जाएगा, भले ही यह शून्य हो। – Pointy

+4

मेरे लिए, jquery का पूरा बिंदु यह है कि आपको "अगर" की आवश्यकता नहीं होगी। बस jquery चयनकर्ता। – NimChimpsky

2

document.getElementById ('कुछ') 'अपरिभाषित' किया जा सकता है। आमतौर पर (हमेशा सोचा नहीं जाता) यह if (document.getElementById('something')) जैसे परीक्षण करने के लिए पर्याप्त है।

+0

आप बंद ब्रैकेट –

+0

@Andreas Niedermair भूल गए: धन्यवाद। इसे जोड़ने के लिए संपादित किया गया। – Robusto

0

हाँ। इस प्रयास करें .. आलसी मूल्यांकन के मूल्यांकन से हालत के दूसरे भाग को प्रतिबंधित करना चाहिए जब पहले भाग झूठी/बातिल है:

var someval = document.getElementById('something') 
if (someval && someval.value <> '') { 
+2

मैं इस तरह से दो बार 'getElementById' को कॉल करने की अनुशंसा नहीं करता। – Pointy

+0

'document.getElementById ('कुछ') 'दो बार मूल्यांकन करने की कोई आवश्यकता नहीं है। – Gumbo

+0

उन्होंने विशेष रूप से उस तत्व का मान बराबर नहीं ', कम से कम, यह है कि मैं कैसे अपने इरादे को पढ़ने .. – Fosco

0

jquery इस और अधिक के साथ प्रदान करेगा ...

if($("#something").val()){ //do stuff} 

इसे लेने के लिए मुझे कुछ दिन लगे, लेकिन यह आपको बहुत अधिक कार्यक्षमता प्रदान करता है। नीचे एक उदाहरण।

jQuery(document).ready(function() { 
    /* finds closest element with class divright/left and 
    makes all checkboxs inside that div class the same as selectAll... 
    */ 
     $("#selectAll").click(function() { 
     $(this).closest('.divright').find(':checkbox').attr('checked', this.checked); 
    }); 
}); 
+6

"JQuery का उपयोग करें" अपने आप पर एक उपरोक्त मूल्य के लायक है? यहां तक ​​कि "यदि आप JQuery का उपयोग कर रहे हैं, तो आप इसे इस तरह से कर सकते हैं ..."? मैन ... अगर मैं सिर्फ जावास्क्रिप्ट थ्रेड में "JQuery कर सकता हूं" पोस्ट करता हूं तो शायद मुझे अधिक प्रतिनिधि मिलेंगे। –

+0

लॉल। अच्छी सलाह imho: हर जावास्क्रिप्ट समस्या के लिए jquery का उपयोग करें। – NimChimpsky

+0

jQuery "अच्छी सलाह" है लेकिन यह नहीं पूछा जा रहा था। मुझे प्यार है जो jQuery प्रदान करता है और इसे बड़े पैमाने पर उपयोग करता है। यह लटका पाने के लिए एक महान ढांचा है। – Andir

12

यह उपयोग करने के लिए बेहतर है (लेकिन wordier) है:

var element = document.getElementById('something'); 
if (element != null && element.value == '') { 
} 

कृपया ध्यान दें, मेरा उत्तर के पहले संस्करण गलत था:

क्योंकि
var element = document.getElementById('something'); 
if (typeof element !== "undefined" && element.value == '') { 
} 

getElementById() हमेशा एक ऑब्जेक्ट (शून्य अगर नहीं मिला वस्तु) और "undefined" के लिए जाँच एक false वापस कभी नहीं होगा, जैसा कि typeof null !== "undefined" अभी भी true है।

+1

यह बेहतर क्यों है? –

+1

परिभाषा की जांच करने के कई तरीके हैं। और उन्हें तोड़ने के कई तरीके। उदाहरण के लिए कहें कि आप टाइप करते हैं (अगर (कुछ वैल्यू) {}): क्या होगा अगर कुछ वैल्यू == झूठा? यह परिभाषित किया गया है, लेकिन यह झूठा है इसलिए स्थिति विफल हो जाती है। यदि आप उपयोग करते हैं (अगर (कुछ वैल्यू!= अपरिभाषित) {}): मैं अपरिभाषित = सत्य सेट करके अपना कोड तोड़ सकता हूं। टाइपफ हमेशा एक प्रकार की स्ट्रिंग देता है और यदि आप जिस ऑब्जेक्ट का परीक्षण कर रहे हैं उसे परिभाषित नहीं किया गया है, तो यह "अपरिभाषित" लौटाता है)। – Andir

+1

इस * विशिष्ट * मामले में, वह 'getElementById() 'को कॉल कर रहा है। हम * जानते हैं * वह क्या करेगा। यह उदाहरण के लिए निरंतर 'झूठी' वापस नहीं कर सकता है। यह एक तत्व, या 'शून्य' वापस करेगा। – Pointy

4

बस इस तरह यह कार्य करें:

अगर (document.getElementById ("someId") {/ कुछ कोड नोट नहीं() expresion/में।!};

तो तत्व! आईडी "someId" के साथ मौजूद नहीं है expresion सही (नहीं गलत === TRUE) या वापस आ जाएगी झूठी === सच;

इस कोड की कोशिश:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8"> 
     <meta name="format-detection" content="telephone-no"> 
     <meta name="viewport" content="user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi"> 
     <title>Test</title> 
    </head> 
    <body> 
     <script> 
var createPerson = function (name) { 
    var person; 
    if (!document.getElementById(name)) { 
     alert("Element does not exist. Let's create it."); 
     person = document.createElement("div"); 
//add argument name as the ID of the element 
     person.id = name; 
//append element to the body of the document 
     document.body.appendChild(person); 
    } else { 
     alert("Element exists. Lets get it by ID!"); 
     person = document.getElementById(name); 
    } 
    person.innerHTML = "HI THERE!"; 

}; 
//run the function. 
createPerson("someid"); 
      </script> 
     </body> 
</html> 

इसे अपने ब्राउज़र में आज़माएं और इसे सतर्क करना चाहिए "तत्व मौजूद नहीं है। इसे बनाते हैं। "

अब पेज के शरीर के लिए

<div id="someid"></div> 

जोड़ सकते हैं और फिर कोशिश करें। देखा! :)

0

साफ संस्करण विशेष रूप से अच्छा है, तो आप सिर्फ से .value प्राप्त करना चाहते हैं तत्व।

document.getElementById('elementsid') ? function_if_exists(); function_if_doesnt_exists(); 
संबंधित मुद्दे