2008-09-10 38 views
8

我似乎无法找出一个好办法做到这一点,但它似乎应该很简单。我有一个要添加div的元素。然后我想要克隆另一个元素,并将其推入该中间格。这是我希望做的事:jQuery“后”选择器的问题

$("#somediv > ul").after("<div id='xxx'></div>").append($("#someotherdiv").clone()); 

这似乎是接近,但并不完全在那里。问题在于“append”似乎在原始的“#somediv> ul”选择器上运行。这种说法很有道理,但这不是我想要的。我怎样才能最有效地选择我添加了“后”,并把我的“#sotherotherdiv”加入它的中间股利?

回答

9

转过来用insertAfter()

$("<div id='xxx'></div>") 
    .append($("#someotherdiv").clone()) 
    .insertAfter("#somediv > ul") 

尝试在完成工作后才将生成的DOM节点添加到文档中。

将节点添加到显示的文档后,浏览器开始监听刷新视图的任何更改。在将节点添加到显示的文档之前完成所有工作确实可以提高浏览器的性能。

0

我怎样才能最有效地选择我添加了“后”,并把我的“#sotherotherdiv”的中间股利?

@文森特的解决方案可能是获得相同结果的最快方法。但是,如果出于某种原因,你需要与after()添加格,然后根据需要选择它,对它进行操作,您可以使用

.nextAll([expr])

Find all sibling elements after the current element.
Use an optional expression to filter the matched set.

所以,你的JS变为:

$("#somediv > ul") 
    .after("<div id='xxx'></div>") 
    .nextAll('#xxx') 
    .append($("#someotherdiv").clone()); 
5

use insertAfter():

$("<div id='xxx'></div>").insertAfter("#somediv > ul").append($("#someotherdiv").clone())