简体   繁体   English

如何移动<li>一个元素<ul>给另一个</ul></li>

[英]how to move <li> element from one <ul> to another

<ul id="List">
<li class="li">1</li>
<li class="li">2</li>
</ul>

<ul id="List2"></ul>
const items = document.querySelectorAll(".li");
for(var i = 0; i < items.length; i++){
 items[i].onclick = function(){
 const list = document.getElementById("List2");
 list.insertBefore(items[i], list.childNodes[0]);
 }
}

im trying to move the clicked li element to another ul with the insertBefore method but it doesnt do anything when i click on one of the li elements, how can i do this?我试图使用insertBefore方法将单击的li元素移动到另一个ul ,但是当我单击其中一个 li 元素时它没有做任何事情,我该怎么做? or am i doing anything wrong?还是我做错了什么? Thanks in advance:D先谢谢了

As you've tagged jQuery in the question, this can be achieved by using appendTo() .正如您在问题中标记了 jQuery ,这可以通过使用appendTo()来实现。 As you've only got 2 ul elements in the DOM the logic is simply to append the clicked li to the ul which is not its parent.由于您在 DOM 中只有 2 个ul元素,因此逻辑只是 append 将点击的li指向不是其父级的ul Try this:尝试这个:

 let $uls = $('#List, #List2'); $('li').on('click', e => { let $li = $(e.target); $li.appendTo($uls.not($li.closest('ul'))); });
 /* Just to make the demo clearer: */ ul { border: 1px solid #C00; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <ul id="List"> <li class="li">1</li> <li class="li">2</li> <li class="li">3</li> <li class="li">4</li> <li class="li">5</li> </ul> <ul id="List2"></ul>

Pure JS solution纯JS解决方案
EDIT: The second solution is the more correct one编辑:第二种解决方案更正确

You can use append like:您可以像这样使用append

 const listone = document.querySelector("#List"); const listwo = document.querySelector("#List2"); var li = listone.querySelectorAll("li"); for (var i = 0; i < li.length; i++) { li[i].onclick = function() { listwo.append(this); } } function MoveLi(el){ }
 #List li{ color:red; } #List2 li{ color:blue; }
 <ul id="List"> <li>1</li> <li>2</li> </ul> <ul id="List2"></ul>


After some tips in the comments, addEventListener solution:在评论中的一些提示之后, addEventListener解决方案:

 const listone = document.querySelector("#List"); const listwo = document.querySelector("#List2"); const li = listone.querySelectorAll("li"); function MoveLi(){ listwo.append(this); this.removeEventListener("click", MoveLi); } li.forEach( (el) => { el.addEventListener("click", MoveLi); });
 #List li{ color:red; } #List2 li{ color:blue; }
 <ul id="List"> <li>1</li> <li>2</li> </ul> <ul id="List2"></ul>

  • Assign the click handler to the original UL element - otherwise your LI elements will swap positions even after appended to the target UL (List2)将点击处理程序分配给原始 UL 元素 - 否则即使附加到目标 UL (List2),您的 LI 元素也会交换位置

  • Use Event.target.closest("li") to retrieve the LI element使用Event.target.closest("li")检索 LI 元素

  • Finally, useElement.append()最后,使用Element.append()

 const EL_list = document.querySelector("#List"); const EL_list2 = document.querySelector("#List2"); EL_list.addEventListener("click", (ev) => { const EL_LI = ev.target.closest("li"); EL_list2.append(EL_LI); });
 #List2{background:gold;}
 <ul id="List"> <li class="li">1</li> <li class="li">2</li> </ul> <ul id="List2"></ul>

Tip: Never use onclick unless you create brand new Elements from in-memory.提示:除非您从内存中创建全新的元素,否则切勿使用onclick Use the better additive method Element.addEventListener() instead改用更好的附加方法Element.addEventListener()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM