在JavaScript中的两个列表之间移动项目

时间:2016-10-27 16:44:17

标签: javascript events

我想在两个列表之间移动项目。所有列表项都有按钮,单击此按钮后,项目应移动到另一个列表。我创建了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);
    }

 })

1 个答案:

答案 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);
}

直播示例:

&#13;
&#13;
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;
&#13;
&#13;