最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Check if string is valid html tag. - Stack Overflow

programmeradmin3浏览0评论

Is there any Native Javascript Functions to check if html tag exists?

I mean :

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

If there is no native function for that, I will keep my function :

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;
}

Is there any Native Javascript Functions to check if html tag exists?

I mean :

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

If there is no native function for that, I will keep my function :

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;
}
Share Improve this question asked Jul 25, 2012 at 12:29 JohnJohn 7,91017 gold badges67 silver badges96 bronze badges 3
  • 6 If you care about performance, you'd be better off making the "tags" variable be an object initialized outside that function, and with the tag names being keys. Then you would not have to iterate through the array to make the determination of whether a string is or is not a tag. – Pointy Commented Jul 25, 2012 at 12:33
  • @Pointy +1. Move the var tags outside of the isValidTag scope so you are not declaring it every time you can isValidTag – Sphvn Commented Jul 25, 2012 at 12:36
  • Instead of iterating, you can check (indexOf > -1) – Samet DEDE Commented Jul 25, 2012 at 12:45
Add a ment  | 

4 Answers 4

Reset to default 6

No. JS has nothing HTML specific in it at all, and DOM doesn't add anything like that.

This might not be as efficient, I haven't done any time trials on it, but it can still be a good alternative to having to maintain a list of all the possible values yourself.

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)));
  };
})();

This method will first check for a cached result, and if there isn't one it will determine a result based on the browser's own document.createElement. If the browser doesn't support it then we can safely assume it isn't an html tag.

Some sample outputs:

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

How about this:

tags = 'a b body...'.split(' ');
function isTag(tag) {
  return tags.indexOf(tag.trim().toLowerCase()) > -1;
}
var tags = {a: true, b: true, /*...,*/ body: true};

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

Thank you, @rsp, for suggesting this simplification

发布评论

评论列表(0)

  1. 暂无评论