简体   繁体   English

Javascript通过类或id获取DOM数组中的元素索引位置

[英]Javascript get element index position in DOM array by class or id

My situation我的情况

var domElements = document.body.getElementsByTagName('*');

Now I want to return the array item key - position of the element in the array - ( for example domElements[34] ) searching in the array for the element with id="asd" .现在我想返回数组项键 - 数组中元素的位置 -(例如domElements[34] )在数组中搜索id="asd"的元素。

How can I achieve this?我怎样才能做到这一点?

What if instead of ID I want to search trough class="asd hey" ?如果我想通过class="asd hey"搜索而不是 ID 怎么办?

Any help appreciated, thank you!任何帮助表示赞赏,谢谢!

NB: Not in jquery, I need it in pure javascript in this case注意:不在 jquery 中,在这种情况下我需要纯 javascript

Try like this 这样尝试

var matches = document.querySelectorAll("#asd");

If you want to search by class 如果您想按班级搜索

var matches = document.querySelectorAll(".asd");

If you want an index of your code 如果您想要代码的索引

try like this 这样尝试

var domElements = document.body.getElementsByTagName('*');

for(var i=0;i<domElements.length;i++){
   if(domElements[i].id==="asd"){
      // search by id 
      // index i 
   }
   if(domElements[i].className==="asd"){
      // search by class 
      // index i 
   }
}

Edit 编辑

There another way you can find index 还有另一种方法可以找到索引

try like this 这样尝试

var domElements = document.body.getElementsByTagName('*');
var domList= Array.prototype.slice.call(document.body.getElementsByTagName('*'));
var itemList = Array.prototype.slice.call(document.querySelectorAll(".asd"));
console.log(domList.indexOf(itemList[0])) // if you wanna find one index

//if you wanna search all index of class 

for(var i=0;i<itemList.length;i++)
  console.log(domList.indexOf(itemList[i]))

Not literal code but if you iterate over the dom elements 不是文字代码,而是如果您遍历dom元素

for (var i = 0; i < parentElement.children.length; i++) {
    var item = parentElement.children[i];
    if (item.getAttribute('id') === 'asd') {
        return i;
    }
}

This has the assumption that instead of selecting ALL DOM elements, you simply select the parentElement of your list of elements - this approach is more logical and certainly a lot more efficient. 假设不选择所有DOM元素,而只是选择元素列表的parentElement -这种方法更合乎逻辑,而且效率更高。

I think you are asking this:我想你在问这个:

var li = document.querySelectorAll("li");
function cutlistitem(lielm) {
lielm.addEventListener("click", function () {
    lielm.classList.toggle("done")
})
};
li.forEach(cutlistitem);

I was creating a todo list app in which I created an unordered list of tasks to be done, in that <ul> every task was in an <li> .我正在创建一个待办事项列表应用程序,在该应用程序中我创建了一个要完成的任务的无序列表,其中<ul>每个任务都在一个<li> Now what I wanted is: to add an event listener to every li element for which I needed to grab every element of li list.现在我想要的是:为每个li元素添加一个事件侦听器,我需要为其获取li列表的每个元素。 I ran a forEach loop on every element of li list and added an event listener to each of the element.我在li列表的每个元素上运行了一个forEach循环,并为每个元素添加了一个事件侦听器。 To get and index of the element you can use indexOf method.要获取元素的索引和索引,您可以使用indexOf方法。

easiest way to do it最简单的方法

var list = [].slice.call(document.querySelectorAll('.class-name'));
var listIndex = list.filter(function(el, index){
    if(el.id === 'id'){
       return index;
    }
})


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

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