getElementsByClassName不是函数javascript

时间:2017-04-24 18:36:35

标签: javascript jquery dom

现在我知道它可能看似重复,但事实并非如此。我阅读了有这个标题的所有其他帖子,但找不到答案。 我有:

<ul>
  <a id="A" class="tablink">A</a>
  <a id="B" class=tablink">B</a>
...
</ul>

我希望上面元素的id是来自另一个无序列表的另一个列表元素的href。

<ul>
  <a id="1" class="subjects" >1</a>
  <a id="2" class="subjects">2</a>
</ul>

我已经有了这段代码

<script type="text/javascript">

$(".tablink").on("click", function(){
  var char = this.getAttribute("id");
  var link = document.getElementsByClassName("subjects").getAttribute("id");
  document.getElementsByClassName("subjects").href = char + link

  });
</script>

但它显示标题中的错误。如果我设置:document.getElementById("subjects"),我也必须将主题更改为id而不是课堂。所以它只适用于一个元素,但我有更多的元素,所以我假设我必须做一些for循环? 编辑:使用jQuery完成的COul,没有for循环?如果是,怎么样?

3 个答案:

答案 0 :(得分:7)

document.getElementsByClassName("subjects")返回一个元素数组。你不能像那样设置它的href属性。也许你想要:

var elems = document.getElementsByClassName("subjects");
for(i=0;i<elems.length;i++) {
   elems[i].href = "yourhref";
}

更新:您在此行收到错误:document.getElementsByClassName("subjects").getAttribute("id")

如上所述,document.getElementsByClassName("subjects")会向您返回一个数组,并且您尝试在其上调用getAttribute函数。所以它可能抛出document.getElementsByClassName(...).getAttribute is not a function

答案 1 :(得分:0)

Element.getAttribute()只是一个Element的函数,而不是你拥有的HTMLCollection。 这就是MDN所说的:

  

getAttribute()返回元素上指定属性的值。

阅读here

答案 2 :(得分:0)

执行document.getElementsByClassName("subjects")后,您会获得HTMLCollection

现在,你无法获得此集合的id属性,因为它没有意义。

他必须收到错误"getAttribute is not a function"