2010-09-23 15 views

उत्तर

17

यह एक खाली चर द्वारा आपके मतलब पर निर्भर करता है।

क्या आपका मतलब यह सौंपा एक मूल्य नहीं पड़ा है, तो आप undefined

alert(someVariable !== "undefined"); 

के लिए जाँच कर सकते हैं या यदि आप जानते हैं कि यह एक मूल्य है, और अगर यह एक तत्व है यह देखने के लिए की जरूरत है, तुम कर सकते हो कुछ इस तरह:

alert(someVariable && someVariable.nodeType); 

या यदि आप सत्यापित करने के लिए कि यह एक प्रकार 1 तत्व है की जरूरत है, तो आप ऐसा कर सकते हैं:

alert(someVariable && someVariable.nodeType === Node.ELEMENT_NODE); 

यह टेक्स्ट नोड्स, विशेषता नोड्स, टिप्पणियां, और a bunch of others को समाप्त करता है।

+0

nodeValue खाली/खाली/बातिल हो सकता है, नहीं? '!! (document.createElement ('p'))। nodeValue' –

+0

जब तक यह संपत्ति 'नोड टाइप' के साथ कुछ अन्य वस्तु नहीं है। संभावनाएं पतली हैं, हालांकि। – crush

5

एक नोड? एक डोम तत्व? इसमें .nodeType संपत्ति होगी।

अन्य उत्तर के लिए nodeValue के बारे में, nodeValue खाली हो सकता है लेकिन एक नोड हमेशा एक nodeType होगा।

5

एचटीएमएल तत्व का प्रयोग और क्रोम देव उपकरण में गुण टैब पर एक नज़र ले जा हम वंश देख सकते हैं:

html-> HTMLHtmlElement-> HTMLElement-> तत्व> Node-> EventTarget- > वस्तु

अब हम नहीं कोई बात नहीं क्या, भी कई अलग अलग संभावनाएं ताकि HTMLElement या तत्व के साथ हमें छोड़ पहले 2 जाँच करना चाहते हैं। तो अंतर क्या है?

एचटीएमएल, प्रमुख, स्क्रिप्ट, मेटा, शरीर, DIV, पी और यूएल सभी एक ही विरासत है:

HTMLElement-> तत्व> Node-> EventTarget-> वस्तु

एक ठेठ दस्तावेज़ से अब कुछ नकारात्मक परिणाम जहां:


<!DOCTYPE html>  DocumentType->Node->EventTarget->Object 
<!-- COMMENT --> Comment->CharacterData->Node->EventTarget->Object 

तो नोड आम संप्रदाय है, लेकिन सवाल यह है कि वैध डॉम नोड की जांच कैसे करें, यह मान्य डॉम नोड तत्व की जांच कैसे करें। तो HTMLElement के साथ कोई ऑब्जेक्ट सत्य लौटने के लिए, अन्यथा झूठी वापसी।

ठीक है अब Chrome डेवलपर टूल का उपयोग करके HTML तत्व को देखने की सुविधा देता है:

$obj.nodeType;  //1  No help what so ever 
$obj.nodeName;  //HTML Gives use the tag names 
$obj.nodeValue;  //null Waste of DOM space 

के प्रोटोटाइप या __proto जाँच करें?

$obj.prototype.nodeType; //TypeError 
$obj.prototype.nodeName; //TypeError 
$obj.prototype.nodeValue; //TypeError 

$obj.__proto__.nodeType; //undefined 
$obj.__proto__.nodeName; //undefined 
$obj.__proto__.nodeValue; //undefined 

ठीक है इसलिए नोड का उपयोग करने के लिए उपयोग किया जाता है। आइए निर्माता को ले जाएं।

$obj.constructor.name  
//"HTMLHtmlElement"  promising... 

$obj.constructor.__proto__.prototype.toString() 
//[object Object] 

$obj.constructor.__proto__.constructor.name 
Function 

$obj.constructor.__proto__.prototype.constructor.name 
HTMLElement 
//BINGO 

अब एक अच्छी स्वच्छ कुशल उपयोगिता फ़ंक्शन में लपेटें।

//readable version 
isElement=function($obj){ 
    try { 
     return ($obj.constructor.__proto__.prototype.constructor.name)?true:false; 
    }catch(e){ 
     return false; 
    } 
} 

/** 
    * PRODUCTION 
* Return true if object parameter is a DOM Element and false otherwise. 
* 
* @param {object} Object to test 
* @return {boolean} 
*/ 
isElement=function(a){try{return a.constructor.__proto__.prototype.constructor.name?!0:!1}catch(b){return!1}}; 

टेस्ट:

$html=get('html')[0];   //[<html data-role=​"webpage" data-theme=​"dark" data-require=​"fa" data-hello=​"world">​…​</html>​] 
isElement($html);    //"HTMLElement" 
isElement($html.dataset);  //false 
isElement($html.firstChild); //"HTMLElement" 
isElement($html.textContent); //false 

$tail=gei('tail');    //<tail id=​"tail">​…​</tail>​ 
isElement($tail);    //"HTMLElement" 

isElement(get('title')[0]);  //"HTMLElement" 
+1

मध्यस्थ बताते हैं कि हमेशा एक नोड टाइप होता है और यह सही है। यह पहली चीज थी जिसे मैंने चेक किया था और मान 1 है। मानक परिभाषित नोड टाइप 1 "तत्व \t तत्व \t तत्व, पाठ, टिप्पणी, प्रसंस्करण निर्देश, सीडीएटीएएसएक्शन, EntityReference" का प्रतिनिधित्व करता है। प्रश्न 'एलिमेंट' के लिए पाठ, टिप्पणी इत्यादि नहीं था। तो मेरा isElement() फ़ंक्शन सही तरीका है? या मैं गलत हूँ? – NlaakALD

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