JQuery:用另一组元素替换一组元素的优雅方式
JQuery: elegant way to replace set of elements with another set?
我有一堆像 DOM
<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 的情况下执行此操作。 使用容器div 在上述情况下可以工作,但在某些情况下会失败,例如当stuff
位于<table>
内时:
<table>
<head/>
<body>
<tr/>
<tr class="stuff"/>
<tr class="stuff"/>
<tr class="stuff"/>
<tr/>
</body>
</table>
如果我想用另一组行替换标记为 stuff
的行,可能更多,可能更少,我无法在不破坏 HTML 的情况下将它们很好地放入容器中,因为<body>
只能包含 <tr>
s(IIRC)。
$('#outerdiv').empty().append(newContent);
与.html()
不同,无论newContent
是HTML字符串还是现有的DOM结构,这都可以工作。
如果要替换多个元素,但需要保留其同级元素,则可以执行以下操作:
$('.stuff').first().before(newContent).end().remove();
即获取第一个.stuff
元素,在其之前添加新内容,然后删除所有.stuff
元素。
一种方法是使用wrapAll
:
$('.stuff').wrapAll('<div/>').parent().replaceWith('<div class="stuff"/>');
我不确定这是否通过了"优雅"测试,但无论包含元素中是否有任何其他内容,它都可以工作。
话虽如此,但这似乎是对简单问题的一个非常复杂的解决方案。简单的解决方案是将您的元素包装在一个包含元素中;如果正如你所说,你可以保证他们会永远在一起,这应该不是问题。
是:$('#tagetDiv').html(newContent)
- 创建一组元素JointJS
- 如何检查焦点是否离开了一组元素
- 是否可以加快向DOM添加一组元素的速度
- 使用javascript在一组元素上切换类
- 如何使用jQuery查找一组元素的父元素
- 为什么 .data() 适用于一组元素,但不适用于单个元素
- 如何从一组元素中获取 ID 并保存在数组中
- 使一组元素透明,但一个除外
- 当一组元素的所有元素都具有特定值时,如何隐藏表单元素
- 如何在一组元素上触发事件
- JQuery:用另一组元素替换一组元素的优雅方式
- 如何使用 jquery 隐藏下一组元素
- 使用 Raphael JS 一次缩放一组元素
- 循环遍历一组元素 jQuery
- 在没有循环的情况下测试一组元素之间的html5数据相等性
- 为一组元素逐个设置放置阴影的动画
- 当一组元素不总是在同一个父元素中时,如何找到下一个匹配的元素
- 如何在InDesign CS5 javascript中将一组元素锚定到特定的TextFrame
- 使用jQuery将一组元素中的每一个克隆到单独的目标元素中
- 使用jQuery计算一组元素的最大宽度