Javascript jquerynot";采取;IE中容器内的内容?

Javascript jquerynot";采取;IE中容器内的内容?,javascript,jquery,html,internet-explorer,internet-explorer-11,Javascript,Jquery,Html,Internet Explorer,Internet Explorer 11,我有一个这样的部门: <div class='x' data-x='xxx'> <div> bla bla </div> <a> blabla </a> <!-- other stuff --> </div> (我需要获取格式化的div并在以后使用,所以我使用php创建它们,并使用JS删除它们以供以后使用) 如果我用chrome记录var divs[0],我会看到整个div(容器+内容): 布拉布拉 布拉

我有一个这样的部门:

<div class='x' data-x='xxx'>

<div> bla bla </div>
<a> blabla </a>
<!-- other stuff -->

</div>
(我需要获取格式化的div并在以后使用,所以我使用php创建它们,并使用JS删除它们以供以后使用)

如果我用chrome记录var divs[0],我会看到整个div(容器+内容):


布拉布拉
布拉布拉
但如果我登录IE(使用IE 11),我只会得到容器:

<div class='x' data-x='xxx'></div>

为什么会这样?我怎样才能解决这个问题

谢谢

更新:

这似乎令人难以置信,尽管我将div存储在一个VAR中,但如果我不使用$()克隆它们,克隆()就会丢失IE中的内容。。。这是不符合逻辑的,因为我不是在存储集合的引用,而是在存储集合本身

另一件事,它似乎“看到”了以后应该发生什么,并改变了行为:

var divs= $('#wrapper .x');
console.log(divs[0]); //WORK

var divs= $('#wrapper .x');
console.log(divs[0]); //NOT WORK <-- why?!
$('#wrapper').html(''); <-- this should execute later!

var divs= $('#wrapper .x').clone();
console.log(divs[0]); //WORK
$('#wrapper').html('');
var divs=$('#wrapper.x');
console.log(divs[0])//工作
var divs=$('#wrapper.x');

console.log(divs[0])//不工作这似乎是一个bug,或者至少是与IE11版本的
.innerHTML
属性不同。它维护对仍然可以引用的节点的引用,但不能引用其子节点

您可以通过更换此类线路来解决此问题:

$('#wrapper').html('');
//with:
$('#wrapper > *').remove();

当我尝试时,它似乎保留了文本。

这似乎是一个错误,或者至少与IE11版本的
.innerHTML
属性不同。它维护对仍然可以引用的节点的引用,但不能引用其子节点

您可以通过更换此类线路来解决此问题:

$('#wrapper').html('');
//with:
$('#wrapper > *').remove();

当我尝试它时,它似乎保留了文本。

如果您将元素的内部HTML设置为空,那么该元素的内容会发生什么变化是任何人都可以猜测的。如果浏览器希望递归地向下遍历并删除节点,那么它将这样做

如果要在清空父节点之前保留选定的某些节点,可以使用
.remove()

var divs=$('#wrapper.x');
divs.remove();//

如果您将一个元素的内部HTML设置为空,那么该元素的内容会发生什么变化是任何人都可以猜测的。如果浏览器希望递归地向下遍历并删除节点,那么它将这样做

如果要在清空父节点之前保留选定的某些节点,可以使用
.remove()

var divs=$('#wrapper.x');
divs.remove();//

这是IE实现
innerHTML
的一个bug


要在维护相应节点及其内容的同时删除元素的内容,请使用本机
textContent=''
或jQuery的
text('')
这是IE实现
innerHTML
的一个缺陷



要在维护相应节点及其内容的同时删除元素的内容,请使用本机
textContent=''
或jQuery的
text('')

您实际上是在删除那里的div元素。他们不再在DOM中了。我拙劣的猜测是,如何处理它们是浏览器的决定。。Chrome可能会缓存它们,但其他人可能不会…@Noldor我更新了post@Noldor通常,DOM节点应该使用与垃圾收集器使用的其余部分相同的引用。DOM本身是一个引用,但即使是一个var也应作为一个引用来保留它。@Katana314 OP只有一个对div的
var
引用,而不是对其中所有节点的引用。@JLRishe间接引用仍然是引用,可以说。我想这取决于浏览器决定哪些引用是“弱的”,并且不应该保持元素的存在。(例如,如果删除了两个邻居,nextChild/previousChild不应使它们保持存在)实际上是在删除那里的div元素。他们不再在DOM中了。我拙劣的猜测是,如何处理它们是浏览器的决定。。Chrome可能会缓存它们,但其他人可能不会…@Noldor我更新了post@Noldor通常,DOM节点应该使用与垃圾收集器使用的其余部分相同的引用。DOM本身是一个引用,但即使是一个var也应作为一个引用来保留它。@Katana314 OP只有一个对div的
var
引用,而不是对其中所有节点的引用。@JLRishe间接引用仍然是引用,可以说。我想这取决于浏览器决定哪些引用是“弱的”,并且不应该保持元素的存在。(例如,如果删除了两个邻居,则nextChild/previousChild不应使它们保持存在)“在console.log()运行之后”,甚至在您选择在控制台中展开它之前,但在对象的情况下,在console.log运行之后。防止这种情况发生的唯一方法是记录一个特定的值,而不是一个对象。因此,jquery对象不包含所选的DOM元素,而是包含对它的引用?“在console.log()运行之后”或甚至在您选择在控制台中展开它之前,但对于对象,在console.log运行之后。防止这种情况发生的唯一方法是记录一个特定的值,而不是一个对象。因此jquery对象不包含所选的DOM元素,而是包含对它的引用?我认为这将删除他想要的文本内容,将
留在后面时。@Katana314
元素.textContent='
删除
元素的所有内容,而包含的节点及其文本内容不会被销毁(如果以前保存了对它们的引用)与
innerHTML
不同,您是否有源代码来支持这是一个bug的说法?当一个值被分配给元素的
innerHTML
,是否有一些规范概述了元素的旧内容会发生什么情况?@JLRishe我有自己的经验。这是IE实现
innerHTML
的一个缺陷,也是IE非标准的一个缺陷
$('#wrapper').html('');
//with:
$('#wrapper > *').remove();