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 theisValidTag
scope so you are not declaring it every time you canisValidTag
– 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
4 Answers
Reset to default 6No. 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