【问题标题】:Trying to Clone one Element but multiplies items cloned试图克隆一个元素,但克隆的项目倍增
【发布时间】:2021-12-01 19:38:07
【问题描述】:

我试图仅在一次单击时克隆元素,但是当我连续单击多次然后创建多个项目时,正在克隆多个项目。

我不明白为什么要连续创建多个项目。我只希望 data-id 中的项目应该附加一次,即使我单击它应该删除克隆的项目。此外,当我们单击附加项目时,它们应该被删除。

$('.item-save').click(function() {
  $(this).toggleClass('productad')
  window.localStorage.setItem('test' + this.dataset.id, $(this).hasClass('productad'));
});

$('.item-save').each(function() {
  var id = 'test' + this.dataset.id;
  if (localStorage.getItem(id) && localStorage.getItem(id) == "true") {
    $(this).addClass('productad');
  }
});

$('.item-save').click(function() {
  var id = this.dataset.id;
  $(".item-save").attr("data-id", function() {
    var $button = $(this).clone();
    $button.appendTo('.item-append');
  });
});
.item-save {
  position: relative;
  display: block;
  font-size: 14px;
  margin: 5px;
  padding: 5px;
  background: #a5a5a5;
  text-align: center;
  cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<div class='item-all'>
  <div class='item-save' data-id='123'>Save</div>
  <div class='item-save' data-id='124'>Save</div>
  <div class='item-save' data-id='125'>Save</div>
  <div class='item-save' data-id='126'></div>
</div>
<div class='item-append'></div>

这是我的代码JsFiddle Demo

我使用 localStorage 函数来存储一些值,因此在不删除 localStorage 的情况下这很重要是否可以解决此问题任何帮助或建议都非常适合

【问题讨论】:

  • 为什么要创建多个项目:您使用的是$(".item-save").attr("data-id", function() {,它将遍历.item-saveall 并克隆每个项目,不需要这个甚至不需要更改data-id 属性。 $(".item-save").click(function() { $(this).clone().appendTo...
  • 去掉循环部分...改为:$(".item-save").click(function() { $(this).clone().appendTo...
  • 我试图只克隆一次 onclick 元素,但是当我连续单击多次然后创建多个项目时会克隆多个项目。请检查 jsFiddle Demo 的更新
  • 所以您现在想要切换“项目附加”条目?点击时,在.item-append中找到匹配项,如果存在则删除,否则添加新项。您可以使用var existing = $(".item-append [data-id=" + $(this).data("id") + "]") if (existing.length &gt; 0) existing.remove(); else ...clone... 匹配属性
  • 不起作用如何设置此代码提供任何 jsfiddle

标签: javascript jquery function onclick append


【解决方案1】:

在你的第二次点击函数中去掉attr()函数。

改变这个

$('.item-save').click(function() {
  var id = this.dataset.id;
  $(".item-save").attr("data-id", function() {
    var $button = $(this).clone();
    $button.appendTo('.item-append');
  });
});

到这里

$('.item-save').click(function() {
     var $button = $(this).clone();
     $button.appendTo('.item-append');

});

【讨论】:

  • 我试图只克隆一次 onclick 元素,但是当我连续单击多次然后创建多个项目时,正在克隆多个项目。请检查 jsFiddle Demo 的更新
  • 你的意思是这样吗? jsfiddle.net/yv3smx8p/1(抱歉加错链接)
  • 任何解决方案亲爱的先生
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 2013-04-03
  • 1970-01-01
相关资源
最近更新 更多