在JavaScript中测试DOM元素的类型

Cas*_*son 95 javascript prototypejs

有没有办法在JavaScript中测试元素的类型?

答案可能需要也可能不需要原型库,但是以下设置确实使用了库.

function(event) {
  var element = event.element();
  // if the element is an anchor
  ...
  // if the element is a td
  ...
}
Run Code Online (Sandbox Code Playgroud)

Fly*_*wat 121

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

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

如果你想要真正有创意,你可以使用标记名字典和匿名闭包,如果是开关或if/else.


bob*_*olt 65

if (element.nodeName == "A")
{
}
else if (element.nodeName == "TD")
{
}
Run Code Online (Sandbox Code Playgroud)

  • 使用**UPPERCASE**的+1原因不是一个选项!;) (10认同)
  • @Robusto不正确.如果文档是HTML并且DOM实现是正确的,它将始终为大写.根据:http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-104682815在"tagName"部分下(对于元素nodeName == tagName)"HTML DOM返回标准大写形式的HTML元素的tagName,与源HTML文档中的大小写无关." (9认同)

roe*_*ing 19

也许您还必须检查节点类型:

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
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:更正了nodeType-value

  • 注意tagName的情况. (3认同)
  • 是的,看起来tagName将返回大写标签名称. (3认同)
  • @TJCrowder所以看起来最好的选择是`element.tagName.toLowerCase()==='a'` (2认同)

Eri*_*lin 6

roenving是正确的但是您需要将测试更改为:

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

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