给定一个元素,在 NodeList 中找到它的索引



当你在NodeList中有一个NodeList和一个DOM元素时,找出NodeList中元素索引的好方法是什么?

不需要

转换NodeList就可以使用indexOf(),只需使用

Array.prototype.indexOf.call(nodeList, element)

见下文:

var p = document.getElementById('3')
var nodelist = document.getElementsByTagName('p')
console.log(Array.prototype.indexOf.call(nodelist, p))
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur tortor sem, egestas id lectus sit amet, bibendum aliquam nulla. Quisque quam arcu, sagittis vitae consectetur ac, interdum vel justo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam bibendum rhoncus ipsum id ultricies. Integer sodales posuere magna, eu vehicula velit condimentum vitae. Quisque id felis sapien. Nullam gravida laoreet efficitur. Interdum et malesuada fames ac ante ipsum primis in faucibus. Curabitur luctus ac dui eu placerat. Nam ornare lorem sapien, at dapibus lorem aliquam in. Cras sapien odio, fermentum quis ante sed, faucibus consequat elit.
</p>
<p>
Nam ac suscipit massa. In molestie pharetra placerat. Sed ultrices ut diam vel consequat. Morbi et lectus in massa rhoncus volutpat. Duis sit amet tempus ligula, in gravida leo. Nunc posuere rutrum nibh. Ut non sem ac augue efficitur efficitur. Nunc ornare dui enim, quis interdum purus ultricies non. Donec sapien quam, aliquam in metus vel, euismod porta metus. Phasellus euismod pretium velit a efficitur. Aliquam faucibus ultrices libero a dictum. Morbi convallis magna quis accumsan scelerisque. Donec porta elit sed orci pellentesque, id pulvinar nunc luctus.
</p>
<p>
Aliquam enim diam, rhoncus et arcu nec, sodales pharetra mauris. Morbi sodales finibus magna, in aliquet magna ultrices ut. Praesent varius placerat nulla, non mattis justo commodo rhoncus. Phasellus dolor ligula, finibus ac ipsum vel, dictum ullamcorper turpis. In ut ullamcorper mi. Vestibulum laoreet interdum vulputate. Phasellus venenatis feugiat turpis eget pretium. Integer blandit tellus urna, sed commodo purus efficitur sit amet. Curabitur ex lacus, elementum et augue ut, egestas hendrerit ipsum. Curabitur condimentum diam felis, at efficitur nunc convallis sed.
</p>
<p id="3">
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam massa nunc, hendrerit eu odio nec, rhoncus ultricies purus. Pellentesque eros velit, porttitor eu lectus vel, convallis sagittis tortor. Praesent facilisis, augue ac volutpat interdum, odio nulla ornare nulla, sed luctus sapien lectus at ipsum. Vestibulum auctor lobortis pellentesque. Aliquam interdum in lacus sed rhoncus. Suspendisse a velit quis leo iaculis dapibus.
</p>
<p>
Nunc eget tristique eros. Cras elementum, nunc eu vestibulum tempor, eros nibh mattis turpis, ac varius erat nisi in felis. Proin nulla libero, viverra quis cursus lacinia, venenatis ac quam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla vitae est non metus rutrum dignissim tincidunt quis elit. Sed rhoncus augue eu orci ornare congue. Suspendisse feugiat dapibus blandit. Suspendisse a egestas diam, ut efficitur leo. Sed porttitor ornare tristique. Quisque quis nisl a felis viverra mollis a sed nibh. Sed maximus, dolor at ultrices lacinia, quam sem lobortis enim, eu malesuada augue enim vel neque. Integer dapibus eros eget tortor egestas, quis bibendum ipsum tempor.
</p>

如果您认为这太冗长,您可以存储对Array.prototype.indexOf.call()的引用:

const indexOf = Function.prototype.call.bind(Array.prototype.indexOf)
console.log(indexOf({ 500: 'foo', length: 1000 }, 'foo'))

只需确保indexOf()的目标具有数值属性和length即可。

将其转换为数组:

var arr = Array.prototype.slice.call(nodeList);

然后在上面使用indexOf

var index = arr.indexOf(element);

最新更新