我想打一个函数的效果:如何测试,如果目前的浏览器支持给定标记名
function supportsElem(tagName) {
// returns boolean
}
其中:
supportsElem("div") // true
supportsElem("randomtext") // false
什么最简单的方法来做到这一点?
我想打一个函数的效果:如何测试,如果目前的浏览器支持给定标记名
function supportsElem(tagName) {
// returns boolean
}
其中:
supportsElem("div") // true
supportsElem("randomtext") // false
什么最简单的方法来做到这一点?
只是一个猜测,因为我从来不必关心这一点。但在我看来,您可以创建元素,然后检查并确保它的行为应该像它应该那样。例如,它具有某些属性,或者它的构造函数是正确的(或者至少与通用的不受支持的元素相同)。
构造检查(未经测试)的一个例子:
// pick a name that'll never be an element
var generic_element = document.createElement('randomtext');
var tagName_to_check = document.createElement('div');
if (tagName_to_check.constructor === generic_element.constructor) {
// the browser treats the node as a generic element, rather than
// (eg) a DivElement
// so it's probably unsupported
}
这种方法绝对有效(甚至在IE8中)。见:http://jsfiddle.net/t9T5A/5/好的! – ryanve 2012-04-06 21:37:59
您可以简单地创建元素,然后使用特定于此元素的方法对其进行测试。
正确,但我不知道标签是什么。是否有一种特定于所有已知元素的方法,但不包含所有已知元素的方法? – ryanve 2012-04-06 19:53:32
试试这个:
function testTag(tagname) {
return document.createElement(tagname) instanceof HTMLUnknownElement;
}
我不知道这(HTMLUnknownElement
),会有什么样的浏览器的支持,虽然。
这比努力付出更多的努力。
只需保留所有有效标签的字典(easy to find online)。基本上串
的数组,然后它只是
var dictionary = ["div", "a", "input", "span", ..., "td"];
var myTag = "div";
dictionary.indexOf(myTag); // if this doesn't return -1, then the tag is valid
正确,但只是承担支持,这实际上是我最初的想法,除了我认为正则表达式比数组快。仅供参考,最可靠的元素列表在http://dev.w3.org/html5/markup/elements.html或 http://dev.w3.org/html5/spec-author-view/index.html和你应该也可以阅读http://w3fools.com/;) – ryanve 2012-04-06 20:10:19
假设支持什么? indexOf将比regec更快。另外我知道w3schools是垃圾,它只是第一个搜索结果。 – Griffin 2012-04-06 20:12:34
我的意思是测试浏览器是否确实识别了该元素,而不是测试浏览器是否应该识别该元素。 – ryanve 2012-04-06 20:48:01
大多数浏览器,甚至是IE6,都愿意处理虚构的标签。这里有什么更大的目的?你是否想制作自己的HTML5垫片或什么? – Pointy 2012-04-06 19:32:00
@Pointy我需要能够辨别像'div! contenteditable'与'contenteditable!检查“字符串的第一部分可能是一个tagName。其余部分是attr名称。 (我知道我可以使用所有标签名称的正则表达式,但有108个,所以我正在寻找更快的方式) – ryanve 2012-04-06 19:33:48