GetElementByID - 多个 ID

IT技术 javascript arrays get element document
2021-01-30 13:23:10
doStuff(document.getElementById("myCircle1" "myCircle2" "myCircle3" "myCircle4"));

这行不通,所以我需要逗号或分号来完成这项工作吗?

6个回答

document.getElementById()一次只支持一个名称,并且只返回一个节点而不是节点数组。您有几种不同的选择:

  1. 您可以实现自己的函数,该函数接受多个 id 并返回多个元素。
  2. 您可以使用document.querySelectorAll()它允许您在 CSS 选择器字符串中指定多个 id。
  3. 您可以在所有这些节点上放置一个通用类名,并document.getElementsByClassName()与单个类名一起使用。

每个选项的示例:

doStuff(document.querySelectorAll("#myCircle1, #myCircle2, #myCircle3, #myCircle4"));

或者:

// put a common class on each object
doStuff(document.getElementsByClassName("circles"));

或者:

function getElementsById(ids) {
    var idList = ids.split(" ");
    var results = [], item;
    for (var i = 0; i < idList.length; i++) {
        item = document.getElementById(idList[i]);
        if (item) {
            results.push(item);
        }
    }
    return(results);
}

doStuff(getElementsById("myCircle1 myCircle2 myCircle3 myCircle4"));
@MHB - 不是这种技术。
2021-03-15 13:23:10
谢谢,哇,这是一个信息矿山!非常有帮助,谢谢我会调查这些选项:D
2021-03-19 13:23:10
我认为querySelector接受 CSS 语法,所以我们需要用逗号分隔选择器。
2021-04-03 13:23:10
我可以使用一系列数字,例如:myCirclei而不是?@jfriend00
2021-04-11 13:23:10
@VisioN - 是的,你说得对 - 我在回答中更正了这个例子。
2021-04-13 13:23:10

这行不通,getElementById只会按时间查询一个元素。

您可以document.querySelectorAll("#myCircle1, #myCircle2")用于查询多个元素。

ES6 或更新版本

使用新版本的 JavaScript,您还可以将结果转换为数组以轻松对其进行遍历。

例子:

const elementsList = document.querySelectorAll("#myCircle1, #myCircle2");
const elementsArray = [...elementsList];

// Now you can use cool array prototypes
elementsArray.forEach(element => {
    console.log(element);
});

如何在 ES6 中查询 ID 列表

如果您有一组 ID,另一种简单的方法是使用该语言来构建您的查询,例如:

const ids = ['myCircle1', 'myCircle2', 'myCircle3'];
const elements = document.querySelectorAll(ids.map(id => `#${id}`).join(', '));

不,这行不通。

document.getElementById() 方法只接受一个参数。

但是,您可以始终为元素设置类并getElementsByClassName()改为使用现代浏览器的另一个选择是使用querySelectorAll()方法:

document.querySelectorAll("#myCircle1, #myCircle2, #myCircle3, #myCircle4");

我建议使用 ES5 数组方法:

["myCircle1","myCircle2","myCircle3","myCircle4"] // Array of IDs
.map(document.getElementById, document)           // Array of elements
.forEach(doStuff);

然后doStuff将为每个元素调用一次,并将接收 3 个参数:元素、元素数组内元素的索引和元素数组。

getElementByID 就是这样 - 通过 id 获取元素。

也许你想给这些元素一个circlegetElementsByClassName

getElementsByClassName 似乎不起作用。我正在使用 SVG。在我的 SVG 对象中,我写了 class="circle"。这是正确的吗?
2021-03-17 13:23:10