我想在两个列表之间移动项目。所有列表项都有按钮,单击此按钮后,项目应移动到另一个列表。我创建了JavaScript事件但它只能以一种方式工作 - 所以项目可以移动一次,例如从list1到list2但是当我再次尝试点击按钮时,它不起作用。你能看一下我的代码,并建议我如何将我的活动分配给新创建的项目(这些项目刚被移动)?
document.addEventListener("DOMContentLoaded", function () {
var buttons = document.querySelectorAll(".moveBtn");
var list1 = document.getElementById("list1");
var list2 = document.getElementById("list2");
function moveItem(e) {
var newItem = document.createElement("li");
if (this.parentElement.parentElement.id === "list1") {
list2.appendChild(newItem);
} else {
list1.appendChild(newItem);
}
newItem.innerHTML = this.parentElement.innerHTML;
this.parentElement.parentNode.removeChild(this.parentElement);
}
for (var i = 0; i < buttons.length; i++) {
buttons[i].addEventListener("click", moveItem);
}
})
答案 0 :(得分:3)
不要破坏旧元素并创建新元素,只需移动元素:
function moveItem(e) {
var moveTo = this.parentElement.parentElement.id == "list1" ? list2 : list1;
moveTo.appendChild(this.parentElement);
}
另请注意,id
不需要匹配;你可以匹配实际元素:
function moveItem(e) {
var moveTo = this.parentElement.parentElement == list1 ? list2 : list1;
moveTo.appendChild(this.parentElement);
}
直播示例:
document.addEventListener("DOMContentLoaded", function() {
var buttons = document.querySelectorAll(".moveBtn");
var list1 = document.getElementById("list1");
var list2 = document.getElementById("list2");
function moveItem(e) {
var moveTo = this.parentElement.parentElement == list1 ? list2 : list1;
moveTo.appendChild(this.parentElement);
}
for (var i = 0; i < buttons.length; i++) {
buttons[i].addEventListener("click", moveItem);
}
});
&#13;
#list1 {
border: 1px solid green;
}
#list2 {
border: 1px solid blue;
}
&#13;
<div id="list1">
<div>
Item 1
<button class="moveBtn">Move</button>
</div>
<div>
Item 2
<button class="moveBtn">Move</button>
</div>
<div>
Item 3
<button class="moveBtn">Move</button>
</div>
</div>
<div id="list2">
<div>
Item 4
<button class="moveBtn">Move</button>
</div>
<div>
Item 5
<button class="moveBtn">Move</button>
</div>
<div>
Item 6
<button class="moveBtn">Move</button>
</div>
</div>
&#13;