使用jQuery将一个标记替换为另一个标记,保留所有属性&;数据

使用jQuery将一个标记替换为另一个标记,保留所有属性&;数据,jquery,Jquery,我意识到这与类似,但我希望用html中的另一个标记替换标记,但保留对象的属性和任何定义的自定义数据(通过$.data设置)。知道如何实现这一点吗?复制属性应该不会太难,这个答案的重点是保留附加到节点的数据和事件 在编写$('#myid').data('msg','hello world')时,jQuery在内部为DOM元素创建一个特殊属性,名为jQuery.expando(它只是一个以“jQuery”开头,后跟一组数字的字符串)。该属性的值包含jQuery.cache数组的键,自定义数据和事件处

我意识到这与类似,但我希望用html中的另一个标记替换标记,但保留对象的属性和任何定义的自定义数据(通过$.data设置)。知道如何实现这一点吗?

复制属性应该不会太难,这个答案的重点是保留附加到节点的数据和事件

在编写
$('#myid').data('msg','hello world')
时,jQuery在内部为DOM元素创建一个特殊属性,名为
jQuery.expando
(它只是一个以
“jQuery”
开头,后跟一组数字的字符串)。该属性的值包含
jQuery.cache
数组的键,自定义数据和事件处理程序存储在该数组中

// lets assume you want to replace node a with node b
// we need the DOM elements for this
var nodea = ..., nodeb = ...;

// jQuery data references are stored in a special property of the node
var key = nodea[jQuery.expando], 
cache = jQuery.cache[key];

// perform replacement
$(nodea).replaceWith(nodeb);

if (cache) {
  // restore data
  jQuery.cache[key] = cache;
  nodeb[jQuery.expando] = key;
}


不过,你应该自担风险使用它;弄乱内部结构通常不是最好的解决方案。

可能重复您为什么要这样做?具体是哪些标签?为什么不改为编辑HTML源代码?我这样问是因为你想要的似乎是一种糟糕的方法。你的html示例在哪里?@Explosion Pills-另一个问题不是重复的,因为它不包括用
.data()
保存存储的值。frumbert-是否还希望保留事件处理程序?