*选择器在getElementsByTagName()中工作,但不适用于javascript中的getElementsByClassName()?

时间:2014-11-09 12:08:34

标签: javascript getelementsbytagname getelementsbyclassname

我可以使用' *'选择器在getElementsByTags()中,但不在getElementsByClassName()或getElementByID()中。

有人可以解释原因吗?并且,无论如何在javascript方法中使用子串选择器,即(getElementsByClassName(" * profile")来选择其类名称包含' profile'?

的元素

以下是我的代码:

<body>
<div class="yahoo">
</div>
<p class="yahoo">
</p>
<ul class="yahoo">
</ul>

<div class="yahoo">
</div>


<input type='text'>
    <script type="text/javascript">
    function select(){
    var elements = document.getElementsByTagName("*")
    var elements2 = document.getElementsByClassName("*")
    console.log(elements)
}

select()
</script>

1 个答案:

答案 0 :(得分:2)

此行为符合DOM-Level-2-Core specification,其中声明:

  

<强>的getElementsByTagName
  返回具有给定标记名称的所有后代元素的NodeList,按照在此元素树的前序遍历中遇到它们的顺序。
  参数
  DOMString类型的名称   要匹配的标记的名称。特殊值“*”匹配所有标签。

对于*方法,chracter getElementsByClassName没有特殊的概念,它被视为字面名称。

<强> UPD 即可。解决你的第二个问题:

  

无论如何在javascript方法中使用子串选择器,即(getElementsByClassName(“* profile”)来选择其类名称包含“profile”的元素?

您无法使用getElementsByClassName但是可以使用另一个非常有用的querySelectorAll方法:

document.querySelectorAll('[class*="profile"]');