getElementsByClassName不是JavaScript的一个函数

3

现在我知道这似乎是一个重复问题,但实际上并不是。我看了所有其他标题相同的帖子,但没有找到答案。

<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"),它可以工作,并且我还必须将subjects改为id而不是class。因此,它仅适用于一个元素,但是我有更多的元素,因此我认为我必须使用某种for循环?编辑:是否可以使用jQuery完成此操作,而不需要for循环?如果可以,如何操作?


1
在 jQuery 回调函数中使用 getElementsByClassName()。没问题。 - Marco Bonelli
2
不清楚你遇到了什么错误,但你应该阅读querySelectorAll、getElementsByClassName和其他getElementsBy*方法返回什么? - Felix Kling
3
补充Marco的评论,如果您已经在其他地方使用jQuery,为什么不在这里也使用它? - Felix Kling
1
@scrappedcola:但是错误不应该是“getAttribute不是一个函数”吗?不过你可能是对的,OP可能错误地报告了错误。 - Felix Kling
1
既然您主要使用本地DOM方法,那么最好放弃jQuery依赖及其所有开销。 - user1106925
显示剩余7条评论
3个回答

8

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不是一个函数的错误。

@MarcoBonelli 更新了。 - mehulmpt
这仍然不是OP在标题中提到的错误。 - Marco Bonelli
2
我非常确定原帖作者对自己在做什么毫无头绪,甚至没有读错误信息,只是复制粘贴代码来寻求帮助。 - Marco Bonelli
1
根据OP的代码,会抛出“document.getElementsByClassName(...)。getAttribute不是函数”的错误。 - mehulmpt
@MehulMohan 我知道你是对的,你的答案也是正确的,但是这个问题被提问的方式不太对。 - Marco Bonelli

0

Element.getAttribute() 是一个仅适用于元素的函数,而不是您所拥有的 HTMLCollection。这是 MDN 的说法:

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

请阅读此处


注意:getElementsByClassName 返回的是 HTMLCollection,而不是数组。 - Felix Kling
@FelixKling 谢谢您的纠正。您是正确的。已更新答案。 - Waqas

0
当您执行document.getElementsByClassName("subjects")时,您会得到HTMLCollection
现在,您无法在此集合上获取id属性,因为这没有意义。
他一定会收到错误信息:"getAttribute不是一个函数"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接