【问题标题】:replace ids of html elements in jquery clone object替换jQuery克隆对象中html元素的ID
【发布时间】:2026-01-16 20:35:01
【问题描述】:

所以我有一些 HTML,我想克隆几次并附加到文档中。这只是典型的 HTML 表单内容。但是由于像<label for="something"> 这样的东西是基于元素ID 工作的,如果jquery clone()'d 元素中的每个HTML 元素都可以有一个唯一的ID,那将是很好的,除了它们的所有克隆对应物。就像我如何做到这一点的猜测一样,我想知道是否有可能使我的初始元素中的 ID 都包含一些唯一的字符串。然后我可以以某种方式遍历元素并将该字符串替换为 _1,_2,_3 等。

我还没有走多远,但似乎这样的事情应该可行。

$(document).ready(function(){
  var toReplace = "containerUniqueCharacterString1234";
  var copy = $('#containerUniqueCharacterString1234').clone(true);

  copy[0].style.display = "block"; //so i can reference the first element like this

  console.log(copy[0]); //[object HTMLDivElement] 

  $('body').append(copy);

  $.each(copy, function(index, value){

    var children = copy[index].childNodes;
    console.log(children); //[object NodeList] 

    var len = children.length;

    if (copy[index].childNodes.length > 0){
      if (copy[index].childNodes.hasOwnProperty('id')){

        //replace the toReplace string with an incremented number here(?)
        //annnnd this is where i've gotten in too deep and made this overly complex

       }
    }

    $('#otherResults').append(len);

  });
});

http://jsbin.com/ecojub/1/edit

或者也许有一个更简单的方法来做到这一点。 谢谢!

【问题讨论】:

  • 您也可以在输入元素周围加上标签。里程可能会有所不同:)
  • 在克隆中使用类不是更好吗?
  • @popnoodles 可能。但正如我解释的那样,有些东西需要特定的 ID。所以对我来说,这是必须的。谢谢
  • "something requires specific IDs" 所以你不能使用这个选择器:"#element1 .someinput" "#element2 .someinput" "element3 .someinput" 来专门定位东西?您正在使用 jQuery - 这可能不是必须的。
  • 我敢打赌,如果你提供了更多关于你认为你为什么需要这个的信息,我们可能会告诉你为什么你不需要。可以做你想做的事。我非常怀疑这是必要的。

标签: javascript jquery


【解决方案1】:

如果您多次复制 HTML 元素仅用于显示,也许您应该考虑使用模板引擎而不是复制 DOM 元素,因为后者成本高且不易维护。 underscore 有一个非常好用的功能,http://documentcloud.github.com/underscore/#template

【讨论】:

  • 好的。 4kb。很酷。虽然我仍然对如何遍历 jquery 对象和更改特定属性感兴趣,但我一定会检查一下。谢谢!
  • 你在想的可能是一个通用的函数,它可以递归地进入某些DOM元素并修改子元素。这是我添加到您的 jsbin 页面的示例,jsbin.com/ecojub/6/edit