Javascript wrapInner没有';t向DOM中的包装元素添加子元素

Javascript wrapInner没有';t向DOM中的包装元素添加子元素,javascript,jquery,dom,Javascript,Jquery,Dom,我试图做一个内部包装,然后操纵包装的内容。然而,包装似乎从来没有得到它的孩子们补充!下面是一个测试,显示了问题: var images = $(element).find('img'); console.log(images); var wrap = document.createElement("div") $(element).wrapInner(wrap) var images2 = $(wrap).find('img'); console.log(images2); 有什么想法吗?显

我试图做一个内部包装,然后操纵包装的内容。然而,包装似乎从来没有得到它的孩子们补充!下面是一个测试,显示了问题:

var images = $(element).find('img');
console.log(images);
var wrap = document.createElement("div")
$(element).wrapInner(wrap)
var images2 = $(wrap).find('img');
console.log(images2);


有什么想法吗?

显然,当您将一个元素传递给
.wrapInner()
函数时,它是该元素的一个结构相同的副本,而不是元素本身。在您的示例中,您将注意到以下几点:

  • #元素
    最终会像预期的那样有一个子元素:一个包含三个图像的div
  • 但是
    wrap.parentNode
    null
    表示它存在于内存中,而不是附加到DOM
  • wrap==$(“#元素”).children().get(0)
    返回false以确认假设
解决方案:按如下方式修改代码:

var $images1 = $("#element").find('img');
$("#element").wrapInner("<div></div>");
var $images2 = $("#element").children().find("img");
// the div can be accessed by doing $("#element").children()
console.log($images1.length, $images2.length, $images1.get(0) === $images2.get(0));
var$images1=$(“#元素”).find('img');
$(“#元素”).wrapInner(“”);
var$images2=$(“#元素”).children().find(“img”);
//可以通过执行$(“#元素”).children()来访问div
log($images1.length,$images2.length,$images1.get(0)==$images2.get(0));

谢谢。。。呃,这是一个非常烦人的“特性”,我希望jQuery文档能够涵盖它。多亏了你,我有了一把新的工作小提琴:这个“特性”实际上是有意义的,因为不可能使用同一个元素作为多个元素内容的包装器(请参阅)。