【问题标题】:How to get element by class name? [duplicate]如何通过类名获取元素? [复制]
【发布时间】:2013-07-31 17:13:03
【问题描述】:

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

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

我尝试了以下按类获取元素:

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

但是结果报错了:

getElementByClass is not function

如何通过类获取元素?

【问题讨论】:

  • w3schools.com/js/js_htmldom.asp 提到了按类名获取元素,但没有提到如何按类获取元素(没有提到方法)因此我想,我应该尝试使用 document.getElementByClass
  • 谨慎使用 w3schools.com 作为信息来源。还有比这更好的学习场所。例如,MDN

标签: javascript dom


【解决方案1】:

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 的说法,正如yckart 建议的那样,querySelector('.foo')querySelectorAll('.foo') 会更好,因为它们确实得到了更好的支持(93.99% 对 87.24%):

【讨论】:

  • 谢谢。返回的是一个数组
  • @onmyway133:NP。顺便说一句:返回值不是一个数组,它是一个NodeList 对象,它在很多方面表现得像一个数组,但有区别。 check the MDN documentation 了解返回类型的详细信息,以及它的规格
【解决方案2】:

你可以使用

getElementsByClassName

假设你有一些元素并应用了一个类名'test',那么你可以得到如下元素

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

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

Read more

【讨论】:

  • 无缘无故投反对票真的很不道德
  • 它不是,但它确实发生了。我没有 DV,但我的猜测是有人认为你的答案要么没有添加任何 new 内容,而且你的编辑指出 getElementsByClassName 返回一个数组,这是错误的。编辑您的答案并 +1 取消 -1 票
  • 感谢@EliasVanOotegem,但有时会发生......我也没有 DV 你的回答
  • 我也不喜欢没有动力的 DV,所以我想我只是给出为什么有人可能有 DV 你的答案的原因。 “不道德”有点苛刻,但它是反社会的:如果你回答了你认为正确的事情,而事实并非如此,如果 DV 有动力,你就可以学到一些东西
  • 我认为,如果有人投反对票,那人应该在投反对票的背后给出解释。如果你不给出解释,你应该不能投反对票。
【解决方案3】:

另一种选择是使用querySelector('.foo')querySelectorAll('.foo'),它们的浏览器支持比getElementsByClassName 更广泛。

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

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

【讨论】:

  • +1 表示 querySelector,而不是 getElementsByClassName。
  • +1,我希望支持率是相反的,但事实证明,IE8 再次呕吐在我的脸上 ;-),虽然我不会那样做至于说有“更广泛的支持”
  • @EliasVanOotegem 好的,好点!修复它:)
【解决方案4】:

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

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

document.getElementsByClassName('class_name')[0]

更新

现在你可以使用了:

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

document.querySelectorAll(".class_name") 获取具有class_name css 类的元素的NodeList(如果不是,将返回空的NodeList。页面上的元素具有此类名称)。

【讨论】:

猜你喜欢
  • 2012-01-22
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
相关资源
最近更新 更多