【发布时间】: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-save的all 并克隆每个项目,不需要这个甚至不需要更改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 > 0) existing.remove(); else ...clone...匹配属性 -
不起作用如何设置此代码提供任何 jsfiddle
标签: javascript jquery function onclick append