如何以编程方式判断元素是否为自闭合标记

时间:2015-05-27 14:01:11

标签: javascript

使用JavaScript并根据HTML标准,我该如何做到这一点?不知道从哪里开始编码isSingleClosing('input')必须返回true的函数(注意/>),而isSingleClosing('div')返回false例如。自我或单个结束标记看起来像这个<tag/>而非单个结束<tag></tag>

2 个答案:

答案 0 :(得分:4)

最一致和最简单的方法是保留一个自闭元素列表

var elems = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];

function isSingleClosing(elem) {
    return elems.indexOf( elem.tagName.toLowerCase() ) !== -1;
}

答案 1 :(得分:0)

这样的isSingleClosing函数看起来像这样:

function isSingleClosing(tagName){
  var elem = document.createElement(tagName);

  return (elem.outerHTML || new XMLSerializer().serializeToString(elem)).indexOf("></") < 0;
}

它根据传递的tagName创建元素并尝试序列化它。然后它尝试在序列化中查找></。如果已找到,则它不是自动关闭标记,因此请返回false,否则返回1,因此请返回true

几乎每个浏览器都支持outerHTMLXMLSerializer中的至少一个。

这是确定标记符号的函数。但是,这仅涵盖运行此功能的浏览器中支持的标签。

它会返回true bgsound,但falsecommand会被弃用,非标准化或任何浏览器都不支持开头。

可能无法以向后兼容和向前兼容的方式获得所有案例。