1

是否有任何本机 Javascript 函数来检查 html 标签是否存在?

我是说 :

 var tag = "div";
 alert(isValidTag(tag)) // true;
 alert(isValidTag("foo")) // false;

如果没有本机功能,我将保留我的功能:

function isValidTag(tagName) {
  var tags = ["div","span","a","link" ... "body"];
  for(var i=0, len = tags.length; i++ < len; ) {
    if(tags[i] == tagName) return true;
  }
  return false;
}
4

4 回答 4

6

不,JS 没有任何特定的 HTML,DOM 也没有添加类似的东西。

于 2012-07-25T12:32:38.360 回答
4

这个怎么样:

tags = 'a b body...'.split(' ');
function isTag(tag) {
  return tags.indexOf(tag.trim().toLowerCase()) > -1;
}
于 2012-07-25T12:39:38.637 回答
3
var tags = {a: true, b: true, /*...,*/ body: true};

function isTag(_tag)
{
  return tags[_tag];
}

谢谢你,@rsp,建议进行这种简化

于 2012-07-25T12:35:40.433 回答
3

这可能效率不高,我还没有对其进行任何时间试验,但它仍然是一个很好的选择,而不是必须自己维护所有可能值的列表。

var isHTML = (function() {
  var unknown = '[object HTMLUnknownElement]', overrides = {CANVAS:1,VIDEO:1}; //html5 elements. Some browsers don't support these.
  return function(tag) {
    return overrides[tag = tag.toUpperCase()] || (!overrides.hasOwnProperty(tag) && (overrides[tag] = (document.createElement(tag).toString() !== unknown)));
  };
})();

该方法首先会检查缓存的结果,如果没有,则根据浏览器自己的document.createElement. 如果浏览器不支持它,那么我们可以安全地假设它不是 html 标签。

一些示例输出:

isHTML('curve'); //false
isHTML('div'); //true
isHTML('DIV'); //true
isHTML('tbody'); //true
isHTML('object'); //true
isHTML('document'); //false
isHTML('html'); //true
isHTML('svg'); //false
isHTML('rect'); //false
于 2016-01-06T09:22:46.020 回答