繁体   English   中英

如何在javascript中获取元素的索引?

[英]How to get the index of the element in javascript?

NodeList 没有 indexOf(element) 方法? 那么,如何获取元素索引呢?

你可以像这样使用Array.prototype.indexOf.call()

let nodes = document.getElementsByTagName('*');
Array.prototype.indexOf.call(nodes, document.body);

NodeList 对象是一个类似数组的对象。 因此可以使用Array.prototype.slice.call()将其“转换”为数组

var arr = Array.prototype.slice.call(yourNodeListObject); // Now it's an Array.
arr.indexOf(element); // The index of your element :)

在支持 ES6 的浏览器上,您也可以使用Array.from()

const arr = Array.from(yourNodeListObject);

或使用扩展运算符...

const arr = [...yourNodeListObject];

通过迭代元素,并检查它是否匹配。

在其childNodes集合中查找元素索引的通用代码。

function index(el) {
    var children = el.parentNode.childNodes,
        i = 0;
    for (; i < children.length; i++) {
        if (children[i] == el) {
            return i;
        }
    }
    return -1;
}

用法:

// should return 4
var idx = index(document.body.childNodes[4]);

编辑:我无法删除已接受的答案,但下面@kennebec 的答案要好得多,我将逐字引用:

你可以像这样使用Array.prototype.indexOf.call()

 let nodes = document.getElementsByTagName('*'); Array.prototype.indexOf.call(nodes, document.body);

假设您有以下行:

const list=document.querySelectAll('.some_class .someother_class');

list 将是一个节点列表。 因此,我们可以将节点列表转换为数组并创建一个新的索引数组,如下所示:

const indexArr= [...list].map( element => return [...list].indexOf(element) );

indexArr 包含原始列表中元素的所有索引。

只需在脚本中添加一行:

NodeList.prototype.indexOf = Array.prototype.indexOf;   // for IE11

然后像往常一样使用indexOf

var index = NodeList.indexOf(NodeElement);

暂无
暂无

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

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