2014-09-06 142 views
0

我正在尝试做一个innerWrap,然后处理包装的内容。然而,包装似乎从来没有得到它的孩子添加!这是一个测试,显示了问题:wrapInner不会添加子元素来包装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); 

View as JSFiddle

任何想法?

回答

2

显然,当您将一个元素传递给.wrapInner()函数时,该元素的结构上相同的副本,而不是元素本身包裹在内容中。在你的榜样,你会发现以下内容:

  • #element结束有一个孩子如期望的那样,它包含三个图像
  • wrap.parentNodenull表明它存在于内存中一个div,不附DOM
  • wrap === $("#element").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)); 
+0

谢谢...呃,这真是一个令人讨厌的'功能',我希望jQuery文档覆盖。我有一个新的工作小提琴,感谢你:http://jsfiddle.net/n8c7fnrb/1/ – 2014-09-06 15:29:55

+0

这个“功能”实际上是有道理的,因为它是不可能使用相同的元素作为包装的内容多个元素(见[你好,残酷的世界示例](http://api.jquery.com/wrapinner/))。 – 2014-09-06 16:09:40