Javascript IE11 DOM规范化不';不能使用表行
我想规范化表行。这就像一个魅力,除了在IE中(用IE 11测试) 我创建了一个演示片段来演示这个问题:Javascript IE11 DOM规范化不';不能使用表行,javascript,jquery,internet-explorer,dom,normalize,Javascript,Jquery,Internet Explorer,Dom,Normalize,我想规范化表行。这就像一个魅力,除了在IE中(用IE 11测试) 我创建了一个演示片段来演示这个问题: $(函数(){ $(“表tbody tr span”)。每个(函数(){ var$this=$(this); var$parent=$this.parent(); $this.replaceWith($this.html()); $parent[0]。规范化(); }); }); 主席: 出生地 扎卡里·泰勒 弗吉尼亚州巴伯斯维尔 如果“开发人员”工具栏处于打开状态,IE-11似乎无法规范
$(函数(){
$(“表tbody tr span”)。每个(函数(){
var$this=$(this);
var$parent=$this.parent();
$this.replaceWith($this.html());
$parent[0]。规范化();
});
});代码>
主席:
出生地
扎卡里·泰勒
弗吉尼亚州巴伯斯维尔
如果“开发人员”工具栏处于打开状态,IE-11似乎无法规范化已经是文档一部分的元素
这也与IE9和IE10相关(通过使用meta-http equiv=“X-UA-Compatible”
tag进行模拟)
当您只创建新节点而不将它们附加到文档时,一切都很好(在这两种情况下,“开发人员”工具栏处于打开和关闭状态):
d=document.createElement('div');
d、 appendChild(document.createTextNode('text 1'));
d、 appendChild(document.createTextNode('text 2'));
console.log(d.childNodes.length+'-应为2')
d、 规范化();
console.log(d.childNodes.length+'-应该是1')
我对DOM.normalize()不太熟悉,但是如果您已经在使用jQuery,那么操纵元素的内容就相当容易了。我最喜欢的删除不必要的嵌套标记的方法是使用$.text(),如下所示:
如果您的用例确实像您发布的一样简单,那么这种方法就有效了。对于更复杂的用例,还有许多其他方法可以完成这类工作。似乎IE-11无法规范已经是文档一部分的元素。
。这不是真的,normalize()
在IE 11中起作用,例如一个段落:你的第一个例子对我也起作用。@dude,你是对的。我做了更彻底的检查,我想我找到了原因(以及解决方案,如果你需要的话)。欢迎您检查并让我知道(如果它是正确的-请等待奖金的授予,直到它结束,看看是否有其他人有更多关于这个奇怪的情况说)。我不能确认这只是出现在开发者工具栏打开。对我来说,即使开发者工具栏没有打开,这个问题仍然存在。您使用的浏览器/操作系统是什么?正如您在我上面的示例中所看到的,它与例如
元素一起工作。这在表上下文中不起作用一定有原因。@dude“在IE 11中起作用,例如,带有一个段落:jsfiddle…”您的示例在IE11中不起作用。@dude,我在Win 8中使用IE11。从我做的所有检查来看,这似乎是IE中的一个bug。在我的一些检查中,浏览器没有给出准确的预期结果,因此在打开/关闭开发者工具栏之间,我切换网站(打开开发工具->打开测试页->关闭开发工具->打开google.com->打开测试页)。你能试试看,如果它改变了什么,告诉我吗?你检查了更新的答案了吗?我想知道它是否回答了你的问题。
$("table tbody tr span").each(function() {
var $parent = $(this).parent();
$parent.html($parent.text());
});