在JavaScript中有没有一种方法可以测试元素的类型?
答案可能需要使用原型库,但以下设置确实使用了该库。
function(event) {
var element = event.element();
// if the element is an anchor
...
// if the element is a td
...
}
在JavaScript中有没有一种方法可以测试元素的类型?
答案可能需要使用原型库,但以下设置确实使用了该库。
function(event) {
var element = event.element();
// if the element is an anchor
...
// if the element is a td
...
}
您可以使用typeof(N)
来获取实际对象类型,但您想要做的是检查标记,而不是DOM元素的类型。
在这种情况下,请使用elem.tagName
或elem.nodeName
属性。
如果希望更有创意,可以使用标签名称字典和匿名闭包,而不是 switch 或 if/else。
if (element.nodeName == "A") {
...
} else if (element.nodeName == "TD") {
...
}
element.nodeName.match(/\bTBODY\b/i)
或者 element.nodeName.toLowerCase() == 'tbody'
等等。 - Robusto也许你还需要检查节点类型:
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
}
}
编辑:已更正节点类型值
element.tagName.toLowerCase() === 'a'
。 - p3drosolaelement
实际上不是元素(例如,如果您还没有执行上面列出的nodeType == 1
检查),则为element.nodeName.toLowerCase()
。 Node
接口具有nodeName
。对于Element
实例,它与tagName
相同。对于其他类型的节点,它是诸如“#text”或“#document”的内容。不过,我认为我总是会使用nodeType
检查。 - T.J. Crowdernode.tagName == 'DIV'
。 - marcsroenving是正确的,但您需要将测试更改为:
if(element.nodeType == 1) { //代码 }
因为nodeType为3实际上是文本节点,而nodeType为1是HTML元素。请参见http://www.w3schools.com/Dom/dom_nodetype.asp
console.log(document.querySelector("#anchorelem") instanceof HTMLAnchorElement);
console.log(document.querySelector("#divelem") instanceof HTMLDivElement);
console.log(document.querySelector("#buttonelem") instanceof HTMLButtonElement);
console.log(document.querySelector("#inputelem") instanceof HTMLInputElement);
<a id="anchorelem" href="">Anchor element</a>
<div id="divelem">Div Element</div>
<button id="buttonelem">Button Element</button>
<br><input id="inputelem">
接口检查可以通过两种方式进行,分别是 elem instanceof HTMLAnchorElement
或者 elem.constructor.name == "HTMLAnchorElement"
,两种方式都会返回 true
我通常从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]”)。
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
}
tagName
属性。 - Soldeplata Saketos