[英]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.