如何使用jQuery .replaceWith()保存(或复制)属性?

时间:2014-08-14 20:41:44

标签: jquery class element replacewith

我是一个jQuery新手在Trac模板中做一些货物崇拜节目。请原谅这个愚蠢的问题。

Trac 1.0.1(可能还有其他版本)有一个预览功能,它使用jQuery.replaceWith()将新元素 - 而不仅仅是新值 - 添加到故障单标题中。不幸的是,我有一个Trac插件,它通过设置显示来控制元素的可见性,replaceWith()创建新元素并且不复制它们的属性。理想情况下,我有一个jQuery函数将内容从一组元素复制到另一组元素,因此我可以更新现有元素。但是将属性复制到新元素的东西也可以。这可能吗?

我们说(我所有的ORIG)是:

<tr id='x'>
   <td display='none'>ABCD</td>
</tr>

我从服务器获得的更新(称之为NEW)是:

<tr id='x'>
  <td>QRST</td>
</tr>

替换后,我最终得到了包含第二个代码段的页面。我想要的(称之为MERGED)是:

<tr id='x'>
  <td display='none'>QRST</td>
</tr>

今天执行此操作的代码是:

$("#ticket").replaceWith(items.filter('#ticket'));

我结束的地方是:

  function copyHeaderData(f, t) {
    if (f.length != t.length) {
      console.log('Shape mismatch');
    }
    else {
      var i;
      for (i = 0; i < t.length; ++i) {
        t[i].innerHTML = f[i].innerHTML;
      }
    }
  }
  // Update ticket box
  copyHeaderData(items.filter("#ticket").find("td"), $("#ticket td"));

2 个答案:

答案 0 :(得分:0)

我相信你想要使用jQuery的.clone()方法。来自Documentation

  

创建匹配元素集的深层副本。

您可以创建要克隆的元素的变量,例如:

var el = jQuery('.some-element').clone();

然后将其传递给replaceWith:

jQuery('.some-other-element').replaceWith(el);

答案 1 :(得分:0)

尝试

var elem = $(selector-a);
var _elem = $(selector-b);
var clone = elem[0].attributes;
_elem[0].attributes = clone.NamedNodeMap;

参见

convert one element into a like element ala Div -> Span and retain all attributes