我有一堆像

<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/

10-13 00:16