我可以使用带有多个 id 的 document.getElementById() 吗?

问题描述 投票:0回答:18
doStuff(document.getElementById("myCircle1" "myCircle2" "myCircle3" "myCircle4"));

这不起作用,所以我需要逗号或分号才能使其起作用吗?

javascript arrays element getelementbyid
18个回答
88
投票

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"));

21
投票

这是行不通的,

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(', '));

10
投票

不,这行不通。

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

但是,您始终可以为元素设置类并使用

getElementsByClassName()
代替。现代浏览器的另一个选择是使用
querySelectorAll()
方法:

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

3
投票

我建议使用ES5数组方法:

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

然后

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


1
投票

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

也许你想给这些元素一个

circle
类和
getElementsByClassName


1
投票

document.getElementById()
仅接受一个参数。您可以给它们一个类名并使用
getElementsByClassName()


1
投票

不知道这样的东西是否可以在 js、PHP 和 Python 中工作(我经常使用)。 也许只是使用 for 循环,例如:

function doStuff(){
    for(i=1; i<=4; i++){
        var i = document.getElementById("myCiricle"+i);
    }
}

1
投票

Vulgo 在这个帖子上的想法是正确的。我相信他的解决方案是最简单的,尽管他的答案可能更深入一些。这是对我有用的东西。我已经提供了一个例子。

<h1 id="hello1">Hello World</h1>
<h2 id="hello2">Random</h2>
<button id="click">Click To Hide</button>

<script>

  document.getElementById('click').addEventListener('click', function(){
    doStuff();
  });

  function doStuff() {
    for(var i=1; i<=2; i++){
        var el = document.getElementById("hello" + i);
        el.style.display = 'none';
    }
  }

</script>

显然只需更改 for 循环中的整数即可考虑您要定位的元素数量,在本例中为 2。


1
投票

最好的方法是定义一个函数,并向它传递一个参数,即你想要从 DOM 中获取的 ID 名称,然后每次你想要获取一个 ID 并将其存储在一个数组中时,你就可以可以调用该函数

<p id="testing">Demo test!</p>

function grabbingId(element){
    var storeId = document.getElementById(element);

    return storeId;
}


grabbingId("testing").syle.color = "red";

1
投票

您可以使用像这样的惠特数组和 for 循环。

<p id='fisrt'>??????</p>
<p id='second'>??????</p>
<p id='third'>??????</p>
<p id='forth'>??????</p>
<p id='fifth'>??????</p>
<button id="change" onclick="changeColor()">color red</button>
<script>

    var ids = ['fisrt','second','third','forth','fifth'];

    function changeColor() {
        for (var i = 0; i < ids.length; i++) {
          document.getElementById(ids[i]).style.color='red';
 }
    }
</script>

1
投票

如果您像我一样想要创建一个类似 or 的结构,其中任一元素在页面上可用,您可以使用

querySelector
。 querySelector 尝试查找列表中的第一个 id,如果找不到,则继续查找下一个,直到找到元素。

querySelectorAll
的区别在于它只查找单个元素,因此不需要循环。

document.querySelector('#myCircle1, #myCircle2, #myCircle3, #myCircle4');

0
投票

对我来说,有这样的缺陷

doStuff(

    document.getElementById("myCircle1") ,

    document.getElementById("myCircle2") ,

    document.getElementById("myCircle3") ,

    document.getElementById("myCircle4")

);

0
投票

使用 jQuery 或类似工具仅用一句话即可访问元素集合。当然,您需要在 html 的“head”部分中放置这样的内容:

<script type='text/javascript' src='url/to/my/jquery.1.xx.yy.js' ...>

所以这就是魔法:

.- 首先,我们假设您有一些带有您所写的 ID 的 div,即

 ...some html...
 <div id='MyCircle1'>some_inner_html_tags</div>
 ...more html...
 <div id='MyCircle2'>more_html_tags_here</div>
 ...blabla...
 <div id='MyCircleN'>more_and_more_tags_again</div>
 ...zzz...

.- 通过这个“咒语”,jQuery 将返回代表所有 div 元素的对象集合,其 ID 在任何地方都包含整个字符串“myCircle”:

 $("div[id*='myCircle']")

这就是全部!请注意,您摆脱了数字后缀等细节,您可以在一个句子中操作所有 div,为它们设置动画......瞧!

 $("div[id*='myCircle']").addClass("myCircleDivClass").hide().fadeIn(1000);

立即在浏览器的脚本控制台(按 F12)中证明这一点!


0
投票

正如 jfriend00 所说,

document.getElementById() 一次仅支持一个名称,并且仅返回单个节点而不是节点数组。

但是,这里是我创建的一些示例代码,您可以提供一个或一个逗号分隔的 id 列表。它会给你一个数组中的一个或多个元素。如果有任何错误,它将返回一个以错误为唯一条目的数组。

function safelyGetElementsByIds(ids){
    if(typeof ids !== 'string') return new Error('ids must be a comma seperated string of ids or a single id string');
    ids = ids.split(",");
    let elements = [];
    for(let i=0, len = ids.length; i<len; i++){
        const currId = ids[i];
        const currElement = (document.getElementById(currId) || new Error(currId + ' is not an HTML Element'));
        if(currElement instanceof Error) return [currElement];
        elements.push(currElement);
    };
    return elements;
}

safelyGetElementsByIds('realId1'); //returns [<HTML Element>]
safelyGetElementsByIds('fakeId1'); //returns [Error : fakeId1 is not an HTML Element]
safelyGetElementsByIds('realId1', 'realId2', 'realId3'); //returns [<HTML Element>,<HTML Element>,<HTML Element>]
safelyGetElementsByIds('realId1', 'realId2', 'fakeId3'); //returns [Error : fakeId3 is not an HTML Element]

0
投票

我需要类似的东西,并使用了这个:

<script>
  function copyClipboard(target) {
    var copyText = document.getElementById(target).innerHTML;
    navigator.clipboard.writeText(copyText);
   } 
</script>

//html
<button onclick="copyClipboard(getAttribute('id'))" id="grav">123

这样我就可以用简短的代码获取对象id。


0
投票

这不需要 jQuery 也是可行的,只需要一个 querySelect,看起来像这样:

document.querySelectorAll('[id^="myCircle"]')

您不需要末尾的数字。这将搜索所有匹配的 ID。

使用 jQuery 也可以实现同样的效果,如下

 $("[id*='myCircle']")

我会推荐您第一个版本。


-1
投票

解决方案在这里

if (
  document.getElementById('73536573').value != '' &&
  document.getElementById('1081743273').value != '' &&
  document.getElementById('357118391').value != '' &&
  document.getElementById('1238321094').value != '' &&
  document.getElementById('1118122010').value != ''
  ) {
code
  }

-5
投票

您可以使用 document.getElementByID 来完成此操作,具体方法如下。

function dostuff (var here) {
  if(add statment here) {
  document.getElementById('First ID'));
  document.getElementById('Second ID'));
  }
}

给你! xD

© www.soinside.com 2019 - 2024. All rights reserved.