javascript - jQuery 或原生 JS 替换整个元素 (div),包括其 id、类和数据
问题描述
假设有几个类似的元素,例如:
<div id="element_01" class="element" data-id="01" data-color="blue">
Some content
</div>
<div id="element_02" class="element" data-id="02" data-color="yellow">
Some content
</div>
<div id="element_03" class="element" data-id="03" data-color="green">
Some content
</div>
通过 AJAX 调用,我必须获取一个新的整个元素,包括它的所有属性,并用它替换上面的元素之一。加载的元素可能如下所示:
<div id="element_02" class="element active" data-id="02" data-color="red">
Some NEW content
</div>
如您所见,它实际上与原始组中的 element_02 相同,但具有不同的内容、附加的类和不同的 data-color 值。所需的结果应如下所示:
<div id="element_01" class="element" data-id="01" data-color="blue">
Some content
</div>
<div id="element_02" class="element active" data-id="02" data-color="red">
Some NEW content
</div>
<div id="element_03" class="element" data-id="03" data-color="green">
Some content
</div>
我知道如何将一个元素的内容加载到另一个元素中,这将是:
$('#element_02').load(url+' > *');
但是,如前所述,这只会将内容加载到元素中,而只留下类和数据属性。
当然,我可以手动将新类添加到元素中,并在加载后使用函数手动更改数据值,如下所示:
$('#element_02').load(url+' > *', function(){
$('#element_02').addClass('active');
$('#element_02').data('color', 'red');
});
但我想知道是否有一种更通用的方法可以处理所有父属性,而无需手动添加或更改它们。
我的想法是这样的。
- 创建临时 div
- 将整个元素加载到临时 div
- 复制临时 div 和 insertAfter 目标元素的内容
- 删除临时 div
- 删除原始/目标 div
像这样的东西在加载时不会出现大问题和故障吗?
也许有人对此有解决方案。谢谢。
解决方案
我现在确实设法用建议的想法自己解决了这个问题。可能不完美,但有效。
function ReplaceElementCompletely(id) {
$('.element[data-id="'+id+'"]').addClass('remove_this');
$('<div class="temporary"></div>').insertAfter('.element[data-id="'+id+'"]');
$('div.temporary').load(url+' .element[data-id="'+id+'"]', function(){
$('.temporary > .element').insertBefore('.temporary');
$('.temporary').remove();
$('.remove_this').remove();
});
}
ReplaceElementCompletely('02');
推荐阅读
- mongodb - 如何在下面给出的名为 l5p1s1 的 mongodb 集合中找到名为 v 的文档的给定值的总和
- flutter - for-in 使用 dart 异常:类型 '_InternalLinkedHashMap
- javascript - 我想通过添加 CR 和减去 DR 值来使用 JQUERY 计算所有总数
- html - 使用父元素的宽度
- spring-boot - 如何使用 junit5 jupiter 引擎运行 @SpringBatchTest
- python - 如何从python中的字节数组加载密钥库
- sql - Oracle SQL 创建一个虚拟列,做一个最大值然后计数并显示记录
- apache - 没有域的 VPS 上的 Apache2
- stripe-payments - Stripe:是否可以立即向用户计费并同时更改计费周期?
- rest - 响应正文中的 REST API 过滤器选项