我有一堆像
<div>
<div class="stuff"/>
<div class="stuff"/>
<div class="stuff"/>
</div>
我想用一套新的东西代替它
<div>
<div class="stuff"/>
<p class="stuff"/>
<ul class="stuff"/>
<a class="stuff"/>
</div>
它将通过Ajax获取。我的问题是:最好的方法是什么?
$.replaceWith
并没有完全满足我的要求,因为我最终得到了新stuff
的多个副本。我可以保证所有的
stuff
都位于一个连续的块中,因此大概可以在旧stuff
的最后一个元素(或第一个元素之前)后放置一些占位符,删除旧的stuff
,然后将占位符替换为新的stuff
。但是,这似乎是回旋的且不雅致的。有什么聪明的方法,一次性删除所有旧的
stuff
并放入新的stuff
的单个副本?编辑:我也想在不使用任何容器div的情况下做到这一点。在上述情况下,使用容器divs可以工作,但在某些情况下会失败,例如
stuff
在<table>
内部时:<table>
<head/>
<body>
<tr/>
<tr class="stuff"/>
<tr class="stuff"/>
<tr class="stuff"/>
<tr/>
</body>
</table>
如果我想用另一组行替换
stuff
的行,可能会更多,可能更少,则无法将它们放入容器中而不破坏HTML,因为<body>
只能包含<tr>
(IIRC) 。 最佳答案
$('#outerdiv').empty().append(newContent);
与
.html()
不同,不管newContent
是HTML字符串还是现有的DOM结构,它都将起作用。如果有多个要替换的元素,但是需要保留其兄弟元素,则可以执行以下操作:
$('.stuff').first().before(newContent).end().remove();
即采用第一个
.stuff
元素,在其之前添加新内容,然后删除所有.stuff
元素。关于javascript - jQuery:用另一组元素替换一组元素的优雅方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10723452/