根据类和元素类型选择元素

Hum*_*art 3 javascript dom

如何选择具有特定类和特定元素类型的HTML文档中的所有元素?

我正在尝试title loggedin从HTML文档中选择所有类的锚点(然后在浏览器中打开它们).这些是与班级的parragraphs title.

它们是以下DOM树中的叶子:

+ body
  + div class='content'
    + div id='siteTable' class='sitetable linklisting'
      + div class='thing id-t3_xxxx xxx xxx link'
        + div class='entry unvoted'
            + p class='title'
              + a class='title loggedin '
Run Code Online (Sandbox Code Playgroud)

其中x表示可变内容.

(我希望在原始JavaScript中执行此操作,即不在jQuery中.)

Gum*_*mbo 8

试试这个:

var aElems = document.getElementsByTagName("a");
for (var i=0; i<aElems.length; ++i) {
    var classesArr = aElems[i].className.split(/\s+/),
        classesObj = {};
    for (var j=0; j<classesArr.length; ++j) {
        classesObj[classesArr[i]] = true;
    }
    if (classesObj.hasOwnProperty("title") && classesObj.hasOwnProperty("loggedin")) {
        // action
    }
}
Run Code Online (Sandbox Code Playgroud)

一些解释:

  • document.getElementsByTagName返回给定类型的元素数组(在本例中a)
  • 对于该数组中的每个元素,都会提取数组类名称(请参阅参考资料aElems[i].className.split)
  • 然后将每个类名用作索引对象的属性名
  • 然后查找索引的两个类名(请参阅参考资料aElems[i].className.split)


cle*_*tus 5

从技术上讲,这不是一类,而是两类:titleloggedin。您可以使用document.getElementsByClassName()它。

var elements = document.getElementsByClassName("title loggedin");
Run Code Online (Sandbox Code Playgroud)

您可以将两个类传递给该方法。

  • 值得注意的是,“ getElementsByClassName()”具有兼容性影响(在当前时间):http://www.quirksmode.org/dom/w3c_core.html#gettingelements (3认同)