为什么jQuery不包装新元素?

时间:2015-12-09 11:22:42

标签: javascript jquery

我的$new div未包含以下代码:

var $new = $('<div>test</div>');
$('form').append($new.wrap("<div class='new'></div>")) ;

这有什么不对?

2 个答案:

答案 0 :(得分:10)

更新:我们错误地认为$new.wrap()无法正常工作,因为$ new中的 html不在HTML DOM树中,但是只是一个包含html元素的变量。根据与@A的讨论,这是错误的。沃尔夫。

但是,以下解决方案也不错。

var $new = $('<div class="test">test</div>');
$('form').append($new)//first append
   .find('.test')//find appended element
   .wrap('<div class="new" />');//then wrap to appended element

或者,如果您不想为附加元素提供课程,您可以这样做:

$new.appendTo('form')//I am still on $new (no need to find anything)
 .wrap('<div class="new" />');//So, I can wrap to $new

现在,要坚持使用代码,您需要将父元素作为@A返回。沃尔夫提到:

$('form').append($new.wrap("<div class='new'></div>").parent());

我将解释一下这个why actually I need to return the parent element?

$new.wrap('<div class="new" />');//I am still in $new not in the .new element
.append($new.wrap('<div class="new" />');//append the $new not the .new object

因此,wrap方法按预期工作,但append()方法追加返回的html以及为什么在$new.wrap('<div class="new" />')中返回的html是$('<div>test</div>');而不是包装对象。你不会得到你所期望的。因此,为了获得预期的结果,我们可以使用:

$('form').append(
   $new.wrap('<div class="new" />') //I am returning $new
   .parent()//Now, I am returning '.new' 
);//now .new object is appended to the form

这是追加方法的工作原理!

答案 1 :(得分:2)

$http.get('data/websites.json') .success(function (data) { $scope.websites = data; }); 返回元素本身,因此您需要返回wrap()元素:

parent

或使用$('form').append($new.wrap("<div class='new'></div>").parent()); 反转您的逻辑:

appendTo()