在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.tagName
或elem.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]”)。