代码之家  ›  专栏  ›  技术社区  ›  Humphrey Bogart

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

  •  3
  • Humphrey Bogart  · 技术社区  · 15 年前

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

    我想选择全班所有的锚 title loggedin 从HTML文档(然后在浏览器中打开它们)。这些都在全班范围内 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 '
    

    在哪里? x 表示变量内容。

    (我希望在原始的javascript中进行此操作,即在jquery中进行此操作。)

    4 回复  |  直到 15 年前
        1
  •  8
  •   Community CDub    12 年前

    试试这个:

    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
        }
    }
    

    一些解释:

    • document.getElementsByTagName 返回给定类型的元素数组(在本例中 a )
    • 对于该数组中的每个元素,将提取数组类名(请参见 aElems[i].className.split )
    • 然后将每个类名用作索引对象的属性名
    • 然后查找索引中的两个类名(请参见 aelems[i].类名.split )
        2
  •  4
  •   cletus    15 年前

    从技术上讲,这不是一门课,而是两门课: title loggedin . 你可以用 document.getElementsByClassName() 为了这个。

    var elements = document.getElementsByClassName("title loggedin");
    

    可以向该方法传递两个类。

        3
  •  3
  •   Pekka    15 年前

    使用获取特定标记类型的所有元素 document.getElementsByTagName() 浏览列表应该是可行的。对于多个类,您必须解析 className 属性(将包含完整字符串 title loggedin )手动。

    我认为您有充分的理由用纯JavaScript来实现这一点;使用jquery或原型这样的框架会更方便。

        4
  •  2
  •   Terry    13 年前

    我知道这是一个老问题,但是如果您想知道jquery如何选择元素,您可以查看它们独立的选择器引擎的源代码。 Sizzle.js 这些年来,许多聪明的人都把大量的时间花在了表演上。)