多次克隆一个元素

发布于 2025-01-02 11:50:49 字数 955 浏览 0 评论 0原文

我有一个 li 元素,其父级为 div,其 id holder。我需要多次克隆 li,让所有克隆都成为 holder div 的父级,并更改它们的 data-ids。我的层次结构如下所示:

<div id="holder">
    <li data-id=0 class="element">
        //other nodes
    </li>
</div>

如何克隆 li 元素 并更改它的 data-id 所以我得到:

<div id="holder">
    <li data-id=0 class="element">
        //other nodes
    </li>
    <li data-id=1 class="element">
        //other nodes
    </li>
    <li data-id=2 class="element">
        //other nodes
    </li>
    <li data-id=3 class="element">
        //other nodes
    </li>
    <li data-id=4 class="element">
        //other nodes
    </li>
    <li data-id=5 class="element">
        //other nodes
    </li>
</div>

-- David

I have a li element parented to a div with id holder. I need to clone the li multiple times, have all the clones parented to the holder div and change their data-ids. My hierarchy looks like this:

<div id="holder">
    <li data-id=0 class="element">
        //other nodes
    </li>
</div>

How can I clone the li element and than change it's data-id so I get:

<div id="holder">
    <li data-id=0 class="element">
        //other nodes
    </li>
    <li data-id=1 class="element">
        //other nodes
    </li>
    <li data-id=2 class="element">
        //other nodes
    </li>
    <li data-id=3 class="element">
        //other nodes
    </li>
    <li data-id=4 class="element">
        //other nodes
    </li>
    <li data-id=5 class="element">
        //other nodes
    </li>
</div>

-- David

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

简单 2025-01-09 11:50:49

只需使用 cloneclone 即可。 jquery.com/attr" rel="nofollow">attr

var holder, li, clone, counter;
holder = $("#holder");
li = holder.find("li:first");
counter;
for (counter = 1; counter <= 5; ++counter) {
    clone = li.clone();
    clone.attr("data-id", counter);
    clone.appendTo(holder);
}

Just use clone and attr:

var holder, li, clone, counter;
holder = $("#holder");
li = holder.find("li:first");
counter;
for (counter = 1; counter <= 5; ++counter) {
    clone = li.clone();
    clone.attr("data-id", counter);
    clone.appendTo(holder);
}
书信已泛黄 2025-01-09 11:50:49

这是一个快速而肮脏的解决方案:

http://jsfiddle.net/Epzt9/7/

另外 - 和我很惊讶没有其他人提到这一点 - 列表项的包含元素应该是

    ,而不是

    -

  • 标签不独立存在,它们应该属于一个列表。

Here's a quick and dirty solution:

http://jsfiddle.net/Epzt9/7/

Also - and I'm surprised no-one else has mentioned this - your containing element for the list items should be a <ul>, not a <div> - <li> tags don't stand on their own, they should belong to a list.

山田美奈子 2025-01-09 11:50:49

按照这些思路应该可以工作:

var clone = $("#holder > li").last().clone();
clone.data("id", parseInt(clone.data("id"), 10) + 1);
$("#holder").append(clone);

它获取对 #holder克隆 那个。然后,它将 data-id 属性的当前值加 1,并将克隆追加回 #holder

但是,这实际上不会更改元素上属性的值(如果您检查 DOM,克隆似乎与它们来自的元素具有相同的 data-id 值)。新值与该元素关联,如果您稍后使用 jQuery data 方法获取该值,这很好。如果没有,您需要使用 attr 而不是 data 来设置该值。

Something along these lines should work:

var clone = $("#holder > li").last().clone();
clone.data("id", parseInt(clone.data("id"), 10) + 1);
$("#holder").append(clone);

It gets a reference to the last li child of #holder and clones that. It then adds 1 to the current value of the data-id attribute, and appends the clone back into #holder.

However, this won't actually change the value of the attribute on the element (if you inspected the DOM, clones would appear to have the same data-id value as the element from which they came). The new value is associated with the element, which is fine if you are using the jQuery data method to obtain this value later. If not, you would need to use attr instead of data to set the value.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文