jQuery包装语法

问题描述 投票:7回答:6

这是一天的结束。我希望我只是失去逻辑。

我不能让这个工作:

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添加到之后。

javascript jquery html word-wrap
6个回答
3
投票

你有没有尝试过

$myDiv.after($divA.wrap('<div class="divB"></div>'));

仅用于测试目的?

据我所知,你不应该将一个jQuery对象传递给wrap-function:

.wrap()函数可以接受任何可以传递给$()工厂函数的字符串或对象来指定DOM结构。这个结构可以嵌套几层深,但应该只包含一个inmost元素。该结构将缠绕在匹配元素集中的每个元素周围。

如果上面的例子有效,那么这就是原因;-)


3
投票

只是偶然发现了这个问题:jQuery .wrap() isn't working

我想如果你改变你的代码

$myDiv.after($divA.wrap($divB))$myDiv.after($divA.wrap($divB).parent())

你会得到你的包装。


2
投票

令人困惑的部分可能是你,.wrap()返回内部元素,而不是父元素。

所以你必须像这样使用被包装的父对象:

var $divA= $("<div/>").addClass('classA'),
    $divB= $("<div/>").addClass('classB');

$myDiv.after($divA.wrap($divB).parent());

(包装后$divA.parent()等于$divB

所以关键部分是$divA.wrap($divB)返回$divA,而不是$divB

看参考文献:

此方法返回用于链接目的的原始元素集。

http://api.jquery.com/wrap/


1
投票

我得到了这个工作:

$('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。


1
投票

你不是在寻找包装。你要:

divB.append(divA).insertAfter('#myDiv');

0
投票

我可能读错了,但是如果你使用的是jQuery,那不是$ a reserved字符吗?您是否尝试过设置变量名称以便它们不使用它?

如果是这样:

var divA = $("<div></div>").addClass('classA');
divA.wrap("<div class=\"classB\"></div>");
divA.insertAfter($("#myDiv"));

要么

divA.after($("#myDiv"));

Here's the jQuery docs就此事。

© www.soinside.com 2019 - 2024. All rights reserved.