首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >交换两个html元素并保留其上的事件侦听器

交换两个html元素并保留其上的事件侦听器
EN

Stack Overflow用户
提问于 2012-05-23 17:20:49
回答 6查看 19.7K关注 0票数 31

还有类似的问题,但所有的答案都是为了交换html元素,只交换里面的内容。

我需要交换两个div,其中包含大量内容(表、选择框、输入等)。元素上有事件侦听器,所以我需要在交换主div之后保留它们。

我可以访问jQuery 1.5。因此,它的答案是可以的。

EN

回答 6

Stack Overflow用户

发布于 2013-08-30 18:49:35

这是一个更简单的函数,用于交换两个元素,而不需要实际重新加载元素...

代码语言:javascript
复制
function swapElements(obj1, obj2) {
    obj2.nextSibling === obj1
    ? obj1.parentNode.insertBefore(obj2, obj1.nextSibling)
    : obj1.parentNode.insertBefore(obj2, obj1); 
}

注:如果obj1具有像YouTube这样的嵌入式视频,则在交换时它将不会重新加载。它只是改变了元素的位置。

票数 8
EN

Stack Overflow用户

发布于 2012-05-23 21:54:38

如果跟踪两个元素的parentNodes和一个元素的nextSibling,就可以在没有任何临时占位符的情况下交换两个元素及其子元素。

如果第二个元素是唯一的子元素,或者是其父元素的最后一个子元素,则(正确地)将其替换附加到父元素。

代码语言:javascript
复制
function swap(a, b){
    var p1= a.parentNode, p2= b.parentNode, sib= b.nextSibling;
    if(sib=== a) sib= sib.nextSibling;
    p1.replaceChild(b, a);
    if(sib) p2.insertBefore(a, sib);
    else p2.appendChild(a);
    return true;
}
票数 1
EN

Stack Overflow用户

发布于 2016-09-06 19:19:18

我的简单函数似乎是最短且兼容性最广的。它不需要占位符或重新加载元素或任何类似的杂乱操作:

代码语言:javascript
复制
function swapElements(el1, el2) {
    var p2 = el2.parentNode, n2 = el2.nextSibling
    if (n2 === el1) return p2.insertBefore(el1, el2)
    el1.parentNode.insertBefore(el2, el1);
    p2.insertBefore(el1, n2);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10716986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档