这是一天的结束。我希望我只是失去逻辑。
我不能让这个工作:
var $divA= $("<div></div>").addClass('classA');
var $divB= $("<div></div>").addClass('classB');
$myDiv.after($divA.wrap($divB));
以上应该转为:
<div id="myDiv"></div>
进入:
<div id="myDiv"></div>
<div class="classB">
<div class="classA"></div>
</div>
但它似乎不适用于那里的'包装'。我没有得到任何错误,它只是没有divB与divB包装,只是自己插入divA。
我误会了吗?
更新:
一个不起作用的简单示例:
$myBox.after($("<p></p>").wrap("<div></div>"));
这将在myBox之后添加DIV。
似乎jQuery不喜欢将wrap添加到之后。
你有没有尝试过
$myDiv.after($divA.wrap('<div class="divB"></div>'));
仅用于测试目的?
据我所知,你不应该将一个jQuery对象传递给wrap-function:
.wrap()函数可以接受任何可以传递给$()工厂函数的字符串或对象来指定DOM结构。这个结构可以嵌套几层深,但应该只包含一个inmost元素。该结构将缠绕在匹配元素集中的每个元素周围。
如果上面的例子有效,那么这就是原因;-)
只是偶然发现了这个问题:jQuery .wrap() isn't working
我想如果你改变你的代码
$myDiv.after($divA.wrap($divB))
到$myDiv.after($divA.wrap($divB).parent())
你会得到你的包装。
令人困惑的部分可能是你,.wrap()
返回内部元素,而不是父元素。
所以你必须像这样使用被包装的父对象:
var $divA= $("<div/>").addClass('classA'),
$divB= $("<div/>").addClass('classB');
$myDiv.after($divA.wrap($divB).parent());
(包装后$divA.parent()
等于$divB
)
所以关键部分是$divA.wrap($divB)
返回$divA
,而不是$divB
看参考文献:
此方法返回用于链接目的的原始元素集。
我得到了这个工作:
$('div#myDiv').after("<div class='classA'></div>").end().find('.classA').wrap("<div class='classB'></div>");
用你的HTML来解决你的初始问题。 Here是jQuery结束函数的来源。这段代码将使链上升一级(到myDiv级别),然后根据该级别的find('。classA')进行换行。这将找到你的div添加后,并用divB包装在div中。
编辑:好的,我想这会对你有所帮助:
var divA= $("<div></div>").addClass('classA');
$('div#myDiv').after($(divA).wrap('<div class="divB" />'));
我认为问题是当调用div上的wrap时,它需要是一个jQuery对象才能正常工作。所以你真正想到的就是在()中包装divA。
你不是在寻找包装。你要:
divB.append(divA).insertAfter('#myDiv');
我可能读错了,但是如果你使用的是jQuery,那不是$ a reserved字符吗?您是否尝试过设置变量名称以便它们不使用它?
如果是这样:
var divA = $("<div></div>").addClass('classA');
divA.wrap("<div class=\"classB\"></div>");
divA.insertAfter($("#myDiv"));
要么
divA.after($("#myDiv"));