在JavaScript中testingDOM元素的types

有没有一种方法来testingJavaScript中的元素的types?

答案可能或可能不需要原型库,但是下面的设置确实使用了库。

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

您可以使用typeof(N)来获取实际的对象types,但是您要做的是检查标记,而不是DOM元素的types。

在这种情况下,使用elem.tagNameelem.nodeName属性。

如果你想得到真正的创意,你可以使用一个标记名和匿名closures字典,而不是一个开关或if / else。

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

也许你也必须检查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 } } 

编辑:更正了nodeType值

roenving是正确的,但你需要改变testing:

 if(element.nodeType == 1){
 //码
 }

因为3的nodeType实际上是一个文本节点,1的nodeType是一个HTML元素。 请参阅http://www.w3schools.com/Dom/dom_nodetype.asp

我有另一种testing方法相同。

 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 } 

我通常从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,Opera,Edge,IE9 +(在较旧的IE中它返回“[object Object]”)。