如何通过类名获取元素?

IT技术 javascript dom
2021-01-21 21:26:39

使用 JavaScript,我们可以使用以下语法通过 id 获取元素:

var x=document.getElementById("by_id");

我尝试按类获取元素:

var y=document.getElementByClass("by_class");

但它导致了错误:

getElementByClass is not function

如何通过其类获取元素?

4个回答

DOM 函数的名称实际上是getElementsByClassName,而不是getElementByClassName,仅仅是因为页面上的多个元素可以具有相同的类,因此:Elements

this 的返回值将是一个 NodeList 实例,或者是NodeList(FF,例如返回 的实例HTMLCollection)的超集无论如何:返回值是一个类似数组的对象:

var y = document.getElementsByClassName('foo');
var aNode = y[0];

如果由于某种原因您需要返回对象作为数组,您可以轻松地做到这一点,因为它具有神奇的长度属性:

var arrFromList = Array.prototype.slice.call(y);
//or as per AntonB's comment:
var arrFromList = [].slice.call(y);

根据caniuse.com 的说法querySelector('.foo')正如yckart 所建议的那样,并且querySelectorAll('.foo')会更可取,因为它们确实得到了更好的支持(93.99% 对 87.24%):

谢谢。返回的是一个数组
2021-03-21 21:26:39
@onmyway133:NP。只是一个旁注:返回值不是数组,它是一个NodeList对象,它在很多方面都像数组,但有一个区别。查看 MDN 文档以了解有关返回类型的详细信息及其规格
2021-04-10 21:26:39

另一种选择是使用querySelector('.foo')querySelectorAll('.foo')具有比getElementsByClassName.

http://caniuse.com/#feat=queryselector

http://caniuse.com/#feat=getelementsbyclassname

@EliasVanOotegem 好的,说得好!解决它 :)
2021-03-12 21:26:39
+1,我希望支持率是相反的,但事实证明,IE8 再次吐在我的脸上 ;-),尽管我不会说“有很多更广泛的支持”
2021-03-31 21:26:39
+1 用于 querySelector,而不是 getElementsByClassName。
2021-04-05 21:26:39

您需要使用 document.getElementsByClassName('class_name');

并且不要忘记返回的值是一个元素数组,所以如果你想要第一个使用:

document.getElementsByClassName('class_name')[0]

更新

现在您可以使用:

document.querySelector(".class_name")获取class_nameCSS 类的第一个元素null如果页面上没有元素具有此类名称,则返回)

或者document.querySelectorAll(".class_name")使用class_namecss类获取元素的NodeList (如果页面上的元素不具有此类名称,则将返回空的NodeList)。

返回值是一个类似数组的 HTMLCollection,而不是Array dom.spec.whatwg.org/#dom-document-getelementsbyclassname ;)
2021-03-11 21:26:39
为单线点赞。
2021-04-05 21:26:39

您可以使用

getElementsByClassName

假设您有一些元素并应用了类名“test”,因此,您可以获得如下元素

var tests = document.getElementsByClassName('test');

它返回一个实例NodeList,或者它的超集:HTMLCollection(FF)。

阅读更多

没有任何理由地拒绝投票真的是不道德的
2021-03-14 21:26:39
它不是,但它确实发生了。我没有 DV,但我的猜测是有人认为您的答案没有添加任何新内容,并且您的编辑声明getElementsByClassName返回一个数组,这是错误的。编辑您的答案和 +1 以取消 -1 投票
2021-03-22 21:26:39
我认为,如果有人投反对票,那个人应该在投反对票的背后给出解释。如果你不给出解释,你应该无法投票。
2021-03-22 21:26:39
我也不喜欢没有动力的 DV,所以我想我只是给出了为什么有人可能让 DV 你的答案的原因“不道德”有点苛刻,但它是反社会的:如果您回答了您认为正确的问题,而事实并非如此,那么如果 DV 有动机,您就可以学到一些东西
2021-03-28 21:26:39
谢谢@EliasVanOotegem 但它有时会发生......我也没有 DV 你的回答
2021-04-07 21:26:39