Javascript:如何通过类名只获取一个元素?

IT技术 javascript
2021-02-28 17:22:16

如何通过类名只获取一个 DOM 元素?我猜测按类名获取元素的语法是 getElementsByClassName,但我不确定它将返回多少个元素。

提前致谢。

5个回答

document.getElementsByClassName('className')将始终返回多个元素,因为从概念上讲,类旨在应用于多个元素。如果您只想要具有该类的 DOM 中的第一个元素,则可以从返回的数组中选择第一个元素。

var elements = document.getElementsByClassName('className');
var requiredElement = elements[0];

否则,如果您真的只想选择一个元素。然后您需要使用“id”,因为它在概念上用作网页中唯一元素的标识符。

// HTML
<div id="myElement"></div>

// JS
var requiredElement = document.getElementById('myElement');
@Ismatjon 我相信他只是建议采用 ID 方法,因为它总体上更简洁。然而,这里最初的建议是正确的。
2021-04-22 17:22:16
getElementsByClassName 返回一个 NodeList 而不是一个数组 - 仅供参考
2021-04-28 17:22:16
nodelist[index in the node list]然而,使用的初始答案仍然是正确的。第二部分是一个建议(我说的都是)
2021-05-07 17:22:16

说明:

  1. getElementsByClassName 返回一个节点列表而不是一个数组

  2. 你不需要jQuery

  3. 您正在寻找的可能是document.querySelector

如何通过类名只获取一个 DOM 元素?

var firstElementWithClass = document.querySelector('.myclass');

另请参阅:https : //developer.mozilla.org/en/docs/Web/API/Document/querySelector

请您提供一些其他信息,说明您为什么更喜欢使用它来代替 getElementsByClassName?
2021-04-16 17:22:16
@Buts 因为 querySelector (不是 querySelectorAll !)在第一场比赛后停止。但是,querySelectorAll 比 getElementsByClassName 慢得多。
2021-05-13 17:22:16

您可以使用 jQuery:

$('.className').eq(index)

或者您可以使用 javascript 内置方法:

var elements = document.getElementsByClassName('className');

这将返回一个 nodeList 元素,您可以迭代并制作您想要的元素。

如果你只想要一个,你可以像这样访问 javascript 版本中的元素:

elements[index]
@Ismatjon 正如我在其他答案评论中提到的,括号符号索引将为您解决这个问题。如果您需要支持 IE8(不支持),我建议不要使用 getElementsByClassName。而是阅读 document.querySelector 和 document.querySelectorAll
2021-04-16 17:22:16
@lsmatjon 但您可以使用上述方法访问第一个元素
2021-04-26 17:22:16
我已经进行了编辑 - 但请注意,您将返回一个nodeList而不是数组。它们很相似,但又不一样。
2021-04-28 17:22:16
同样在您的 jQuery 示例中,它仍在收集所有元素。api.jquery.com/eq可能是你想要的。
2021-05-06 17:22:16
我知道如何使用 jQuery。这不是我要问的。我想要一个纯 javascript 方法。
2021-05-09 17:22:16

致任何正在寻找单衬里的人

var first = getElementsByClassName('test')[0];

使用NodeList.item()

例如:

var first = getElementsByClassName('test').item(0);