JQuery:用另一组替换元素集的优雅方法?

我有一堆DOM喜欢

我想用一套新东西替换它

 

哪个将通过Ajax获取。 我的问题是:最好的方法是什么?

$.replaceWith不能完全按照我的意愿$.replaceWith ,因为我最终得到了新stuff多个副本。

我可以保证所有的stuff都在一个连续的块中,所以我可以在旧stuff的最后一个元素(或第一个元素之前)放入一些占位符,删除旧的stuff ,并用新的stuff

然而,这似乎相当迂回而且不优雅。 是否有任何聪明的方法,删除所有旧的stuff ,并一次性放入一个新的stuff副本?

编辑:我也想这样做而不使用任何容器div。 使用容器div可以在上面的情况下工作,但在某些情况下会失败,比如当stuff

 

如果我想用另一组行替换标记为stuff的行,可能更多,可能更少,那么我无法将它们很好地放入容器中而不会破坏HTML,因为只能包含

(IIRC)。

 $('#outerdiv').empty().append(newContent); 

.html()不同,无论newContent是HTML字符串还是现有DOM结构,都可以使用。

如果要替换多个元素但需要保留其兄弟姐妹,则可以执行以下操作:

 $('.stuff').first().before(newContent).end().remove(); 

即获取第一个.stuff元素,在其前面添加新内容,然后删除所有.stuff元素。

是的: $('#tagetDiv').html(newContent)

一种方法是使用wrapAll

 $('.stuff').wrapAll('
').parent().replaceWith('
');

我不确定它是否通过了“优雅”测试,但无论包含元素中是否有任何其他内容,它都能正常工作。

尽管如此,这对于一个简单的问题来说似乎是一个非常复杂的解决方案。 简单的解决方案是将元素包装在一个包含元素中; 如果像你说的那样,你可以保证他们永远在一起,这应该不是问题。