qua*_*els 10 javascript jquery internet-explorer dom
我有一个jsfiddle,演示了这个问题:
$(document).ready(function() {
// this seems fine in IE9 and 10
var $div = $("<div>");
console.log("In IE, this <div> is just fine: " + $div[0].outerHTML);
// this is weird in IE
var $test = $("<test>");
console.log("However, this <test> has an xml tag prepended: \n"
+ $test[0].outerHTML);
$test.find("test");
console.log("Now, it does not: \n" + $test[0].outerHTML);
console.log("Why does this behave this way?");
});
Run Code Online (Sandbox Code Playgroud)
为什么会这样?它不会发生在Chrome或Firefox中.有没有更好的方法来解决这个问题,而不是调用.find("test")对象?
为了澄清,我不是在问为什么添加xml标签,而是,我想知道为什么.find()调用可以摆脱它.这对我来说没有意义.
为什么会这样?它不会发生在Chrome或Firefox中.有没有更好的方法来解决这个问题,而不是在对象上调用.find("test")
document.createElement在使用未知的html元素类型时,IE导致问题.它认为它是一个XML节点并添加了前缀的xml命名空间<?XML:NAMESPACE PREFIX = PUBLIC NS = "URN:COMPONENT" />.相反,如果你试图明确提到它是一个html元素,这个问题就不会发生.
尝试:
var $test = $("<html><test/></html>");
Run Code Online (Sandbox Code Playgroud)
问题不再发生.
为了澄清,我不是在问为什么添加xml标签,而是,我想知道为什么.find()调用可以摆脱它.这对我来说没有意义.
现在,当你进行查找时,jquery在内部使用context.getElementsByTagName或(类似于基于类型,无论是类,标签还是id等),这意味着它对元素执行此操作test.所以在IE中,当你这样做时,它可能在内部解决了你试图对html元素而不是xml元素执行操作的事实,它改变了底层上下文的文档类型(但我不知道它为什么会改变父上下文,而不是只返回一个匹配).你也可以通过这个简单的例子来看看.
var $test = document.createElement("test");
console.log("However, this <test> has an xml tag prepended: \n"
+ $test.outerHTML);
$test.getElementsByTagName("test");
console.log("Now, it does not: \n" + $test.outerHTML);
Run Code Online (Sandbox Code Playgroud)
更新
自定义元素类型标识自定义元素接口,并且是必须与NCName生成匹配且包含U + 002D HYPHEN-MINUS字符的字符序列.自定义元素类型不能是以下值之一: annotation-xml,color-profile,font-face,font-face-src,font-face-uri,font-face-format,font-face-name,missing -glyph
所以根据这个你的标签名称是somename-testex: - custom-testIE识别它并且它按预期工作.
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |