简体   繁体   English

从节点列表中获取第一个和最后 n 个项目

[英]Get first and last n items from a nodelist

I have a nodelist我有一个节点列表

    <ul>
        <li>One</li>
        <li>Two</li>
        <li>Three</li>
        <li>Four</li>
        <li>Five</li>
    </ul>
const slides = document.querySelectorAll('ul li');

I want to save copies of first and last 2 li elements to a variable.我想将第一个和最后 2 个 li 元素的副本保存到一个变量中。

const first2 = slides.slice(0, 2),
  last2 = slides.slice(-2);

All the answers I've seen suggest creating array from nodelist but I need these elements to remain a nodelist.我看到的所有答案都建议从节点列表创建数组,但我需要这些元素保持节点列表。 How can I do this?我怎样才能做到这一点?

I want to create clones of these items, add a class to it and add it back to ul.我想创建这些项目的克隆,向其中添加 class 并将其添加回 ul。 So the final html should look like this所以最终的 html 应该是这样的

<ul>
    <li class="copy">One</li>
    <li class="copy">Two</li>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
    <li>Four</li>
    <li>Five</li>
    <li class="copy">Four</li>
    <li class="copy">Five</li>
</ul>

Do you mean something like this?你的意思是这样的吗?

 const slides = document.querySelectorAll("ul li"); const ul = document.querySelector("ul"); const temp = []; slides.forEach(slide => { const clone = slide.cloneNode(true); clone.classList.add("red"); temp.push(clone); }); temp.slice(0, 2).reverse().forEach(slide => { ul.prepend(slide); }); temp.slice(-2).forEach(slide => { ul.appendChild(slide); });
 .red { color:red; }
 <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul>

You can you selector like in CSS.您可以像 CSS 中那样选择器。 In this case :first-child and :last-child在这种情况下:first-child:last-child

 const firstElement = document.querySelector('ul li:first-child'); console.log('firstElement', firstElement) const lastElement = document.querySelector('ul li:last-child'); console.log('lastElement', lastElement)
 ul li:first-child { color:red; } ul li:last-child { color:green; }
 <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul>

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

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