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