2008-10-08 30 views
85

有沒有方法在JavaScript中測試元素的類型?在JavaScript中測試DOM元素的類型

答案可能會也可能不需要原型庫,但是下面的設置確實會利用庫。

function(event) { 
    var element = event.element(); 
    // if the element is an anchor 
    ... 
    // if the element is a td 
    ... 
} 

回答

109

您可以使用typeof(N)獲得實際的對象類型,但你想要做的就是檢查標記,而不是DOM元素的類型。

在這種情況下,請使用elem.tagNameelem.nodeName屬性。

如果您想獲得真正的創造性,可以使用標記名和匿名關閉字典,而不是使用開關或if/else。

63
if (element.nodeName == "A") 
{ 
} 
else if (element.nodeName == "TD") 
{ 
} 
+10

+1原因使用**大寫**不是一個選項! ;) – 2010-06-04 11:20:41

+1

有時候是這樣。無論如何,你總是可以使用`element.nodeName.match(/ \ bTBODY \ b/i)`或`element.nodeName.toLowerCase()=='tbody'`等 – Robusto 2012-09-27 16:05:38

17

也許你得檢查NODETYPE太:

if(element.nodeType == 1){//element of type html-object/tag 
    if(element.tagName=="a"){ 
    //this is an a-element 
    } 
    if(element.tagName=="div"){ 
    //this is a div-element 
    } 
} 

編輯:更正了節點類型值

0

我有另一種測試方法相同。

Element.prototype.typeof = "element"; 
 
var element = document.body; // any dom element 
 
if (element && element.typeof == "element"){ 
 
    return true; 
 
    // this is a dom element 
 
} 
 
else{ 
 
    return false; 
 
    // this isn't a dom element 
 
}

0

我通常是從的toString()的返回值得到它。它工作在不同的方式訪問DOM元素:

var a = document.querySelector('a'); 

var img = document.createElement('img'); 

document.body.innerHTML += '<div id="newthing"></div>'; 
var div = document.getElementById('newthing'); 

Object.prototype.toString.call(a); // "[object HTMLAnchorElement]" 
Object.prototype.toString.call(img); // "[object HTMLImageElement]" 
Object.prototype.toString.call(div); // "[object HTMLDivElement]" 

那麼相關片:

Object.prototype.toString.call(...).split(' ')[1].slice(0, -1); 

它工作在Chrome,FF,歌劇,邊緣,IE9 +(在舊的IE它返回「的翻譯: 「)。