Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么创建带有自定义标记的元素会在IE9或IE10中的outerHTML中添加xml命名空间,直到调用.find()方法为止?_Javascript_Jquery_Internet Explorer_Dom - Fatal编程技术网

Javascript 为什么创建带有自定义标记的元素会在IE9或IE10中的outerHTML中添加xml命名空间,直到调用.find()方法为止?

Javascript 为什么创建带有自定义标记的元素会在IE9或IE10中的outerHTML中添加xml命名空间,直到调用.find()方法为止?,javascript,jquery,internet-explorer,dom,Javascript,Jquery,Internet Explorer,Dom,我有一个JSFIDLE演示了这个问题: $(文档).ready(函数(){ //这在IE9和IE10中似乎很好 变量$div=$(“”); log(“在IE中,这很好:+$div[0].outerHTML); //这在IE中很奇怪 var$test=$(“”); log(“但是,它前面有一个xml标记:\n” +$test[0].outerHTML); $test.find(“test”); log(“现在,它不是:\n”+$test[0].outerHTML); log(“为什么这样做?”)

我有一个JSFIDLE演示了这个问题:

$(文档).ready(函数(){
//这在IE9和IE10中似乎很好
变量$div=$(“”);
log(“在IE中,这很好:+$div[0].outerHTML);
//这在IE中很奇怪
var$test=$(“”);
log(“但是,它前面有一个xml标记:\n”
+$test[0].outerHTML);
$test.find(“test”);
log(“现在,它不是:\n”+$test[0].outerHTML);
log(“为什么这样做?”);
});
为什么会发生这种情况?这在Chrome或Firefox中不会发生。有没有比在对象上调用
.find(“test”)
更好的方法来解决这个问题

编辑 为了澄清这一点,我并不是问为什么要添加xml标记,而是想知道为什么.find()调用要去掉它。这对我来说毫无意义

为什么会发生这种情况?这在Chrome或Firefox中不会发生。有没有比在对象上调用.find(“test”)更好的方法来解决这个问题

这是IE在对未知html元素类型执行
document.createElement
时导致问题的原因。它认为它是一个XML节点,并添加了前缀为
的XML名称空间。相反,如果您试图显式地提到它是一个html元素,那么这个问题就不会发生

尝试:

更新

这是一个

自定义元素类型标识自定义元素接口,是一个字符序列,必须与NCName产品相匹配,并包含U+002D连字符。自定义元素类型不能是以下值之一: 注释xml, 颜色配置文件, 字体, 字体面src, 字体面uri, 字体格式, 字体名称, 缺少图示符

因此,根据这一点,如果您的标签名是
somename测试
ex:-
custom测试
IE识别它并按预期工作


将代码放入问题中,而不仅仅是在JSFIDLE中。没有那么长。添加XML标记可能是因为IE非常确定它是XML,因为没有名为“test”的有效HTML标记没有意义…如果
var$test=$(“”)
使jQuery返回类似
的结构,xml标记是父元素,因此
$test
实际上是一个包含xml标记及其子元素的对象,那么执行
$test.find('test')
将返回与该选择器匹配的所有子元素,因此,返回您的
标记。@adeneo-当然,返回的是。。。但是find也分配吗?注意这里没有
$test=$test.find(“test”)
$(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?");
});
 var $test = $("<html><test/></html>");
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);