2012-04-06 31 views
0

我想打一个函数的效果:如何测试,如果目前的浏览器支持给定标记名

function supportsElem(tagName) { 
    // returns boolean 
} 

其中:

supportsElem("div") // true 
supportsElem("randomtext") // false 

什么最简单的方法来做到这一点?

+2

大多数浏览器,甚至是IE6,都愿意处理虚构的标签。这里有什么更大的目的?你是否想制作自己的HTML5垫片或什么? – Pointy 2012-04-06 19:32:00

+0

@Pointy我需要能够辨别像'div! contenteditable'与'contenteditable!检查“字符串的第一部分可能是一个tagName。其余部分是attr名称。 (我知道我可以使用所有标签名称的正则表达式,但有108个,所以我正在寻找更快的方式) – ryanve 2012-04-06 19:33:48

回答

1

只是一个猜测,因为我从来不必关心这一点。但在我看来,您可以创建元素,然后检查并确保它的行为应该像它应该那样。例如,它具有某些属性,或者它的构造函数是正确的(或者至少与通用的不受支持的元素相同)。

构造检查(未经测试)的一个例子:

// 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 
} 
+0

这种方法绝对有效(甚至在IE8中)。见:http://jsfiddle.net/t9T5A/5/好的! – ryanve 2012-04-06 21:37:59

0

您可以简单地创建元素,然后使用特定于此元素的方法对其进行测试。

+0

正确,但我不知道标签是什么。是否有一种特定于所有已知元素的方法,但不包含所有已知元素的方法? – ryanve 2012-04-06 19:53:32

1

试试这个:

function testTag(tagname) { 
    return document.createElement(tagname) instanceof HTMLUnknownElement; 
} 

我不知道这(HTMLUnknownElement),会有什么样的浏览器的支持,虽然。

+0

好主意。这似乎适用于符合标准的浏览器。但它在IE8中不起作用。测试在这里:http://jsfiddle.net/p68AP/1/ – ryanve 2012-04-06 20:24:53

+0

在IE8中相当于'HTMLGenericElement'尝试:http://jsfiddle.net/MX4Vp/2/在IE – ryanve 2012-04-06 23:31:49

1

这比努力付出更多的努力。

只需保留所有有效标签的字典(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 
+0

正确,但只是承担支持,这实际上是我最初的想法,除了我认为正则表达式比数组快。仅供参考,最可靠的元素列表在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

+0

假设支持什么? indexOf将比regec更快。另外我知道w3schools是垃圾,它只是第一个搜索结果。 – Griffin 2012-04-06 20:12:34

+0

我的意思是测试浏览器是否确实识别了该元素,而不是测试浏览器是否应该识别该元素。 – ryanve 2012-04-06 20:48:01

相关问题