2017-04-24 133 views
0

现在我知道它可能看起来是重复的,但事实并非如此。我阅读所有其他职位与这个标题,但无法找到答案。 我:getElementsByClassName不是函数javascript

<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而不是class。所以它只适用于一个元素,但我有更多的元素,所以我认为我必须做一些for循环? 编辑:使用jQuery完成,没有for循环?如果是,如何?

+1

在jQuery回调中使用'getElementsByClassName()'。好。 –

+2

不能说你得到的错误,但你应该阅读[什么做querySelectorAll,getElementsByClassName和其他getElementsBy *方法返回?](http://stackoverflow.com/q/10693845/218196) –

+0

你的错误是因为'getElementsByClassName'返回一个列表,所以当你尝试访问该列表上的方法或属性时,它不存在。 – scrappedcola

回答

6

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

+2

尽管这是正确的,但并未解释错误。 –

+0

准确。它没有解决OP的错误。 –

+0

@FelixKling更新。 – mehulmpt

0

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

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

阅读here

+0

Nit:'getElementsByClassName'返回* HTMLCollection *,不是数组。 –

+0

@ FelixKling感谢您的纠正。你是对的。更新了答案。 – Waqas

0

当你做document.getElementsByClassName("subjects"),你得到HTMLCollection

现在,您无法在此集合上获取id属性,因为它没有任何意义。

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