[英]Dynamically changed list doesn't work as expected - pure js needed
我想动态更改列表元素的顺序。 单击后,单击的元素应跳至第一位。 但是它总是跳到最后一位。 有什么建议吗?
const ulElement = document.getElementById('nav-list'); const fragment = document.createDocumentFragment(); const listItems = ['Home', 'Work', 'Contact']; listItems.forEach((item) => { const li = document.createElement('li'); li.textContent = item; li.setAttribute('id', item.toLowerCase()); li.addEventListener('click', (event) => { listItems.forEach((items, i) => { if (items.toLowerCase() === event.target.id) { listItems.splice(i, 1); listItems.unshift(event.target.id); } fragment.appendChild(li); }); ulElement.appendChild(fragment); console.log(ulElement); }); fragment.appendChild(li); }); ulElement.appendChild(fragment);
<ul id="nav-list"></ul>
替换行:
ulElement.appendChild(fragment);
附:
ulElement.insertBefore(fragment, ulElement.firstChild);
您可以使用“ insertBefore”。 怎么看:
<script type="text/javascript">
const ulElement = document.getElementById('nav-list');
const fragment = document.createDocumentFragment();
const listItems = ['Home', 'Work', 'Contact'];
listItems.forEach((item) => {
const li = document.createElement('li');
li.textContent = item;
li.setAttribute('id', item.toLowerCase());
li.addEventListener('click', (event) => {
listItems.forEach((items, i) => {
if (items.toLowerCase() === event.target.id) {
listItems.splice(i, 1);
listItems.unshift(event.target.id);
}
fragment.appendChild(li);
});
//ulElement.appendChild(fragment);
ulElement.insertBefore(fragment, ulElement.firstChild);
console.log(ulElement);
});
fragment.appendChild(li);
});
ulElement.appendChild(fragment);
</script>
谢谢您的提问; 我的代码在这里:
const ulElement = document.getElementById('nav-list');
const fragment = document.createDocumentFragment();
const listItems = ['Home', 'Work', 'Contact'];
listItems.forEach(item=>{
const li = document.createElement('li');
li.textContent = item;
li.setAttribute('id', item.toLowerCase());
fragment.appendChild(li);
return li;
});
ulElement.appendChild(fragment);
ulElement.addEventListener("click",event=>{
let li =event.target;
if(li.tagName==='LI'){
fragment.appendChild(li);
ulElement.insertBefore(fragment,ulElement.firstElementChild);
}
});
我认为这个方案更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.