为什么没有getElementByClassName - > getElementsByTagName - > setAttribute工作?

时间:2010-09-26 12:53:43

标签: javascript getelementsbytagname getelementsbyclassname setattribute

我想在新标签页中打开某些链接。由于我无法将其直接设置到<a>标记中,因此我希望将链接放入具有特定类名的<span>标记中,并通过JavaScript设置目标属性。

我认为这很容易,但我无法让它发挥作用:

addOnloadHook(function () {
  document.getElementByClassName('newTab').getElementsByTagName('a').setAttribute('target', '_blank');
});

<span class="newTab"><a href="http://www.com">Link</a></span>

我做错了什么?

2 个答案:

答案 0 :(得分:8)

document.getElementByClassName不存在,正确的函数为document.getElementsByClassName(请注意额外的s)。它返回一个匹配节点数组,因此你要给出一个索引:

addOnloadHook(function () {
  document.getElementsByClassName('newTab')[0].getElementsByTagName('a')[0].setAttribute('target', '_blank');
});

答案 1 :(得分:0)

但您可能需要在页面上使用指定的类('newTab')迭代每个范围才能使其正常工作:

addOnLoadHook(function(){

  var span = document.getElementsByClassName('newTab');

  for(var i in span) {
    span[i].getElementsByTagName('a')[0].setAttribute('target','_blank');
  }

});

如果你在一个范围内有超过1个锚标记,你也会 必须迭代这样的锚标签:

addOnLoadHook(function(){

  var span = document.getElementsByClassName('newTab');

  for(var i in span){
    var a = span[i].getElementsByTagName('a');
    for(var ii in a){
      a[ii].setAttribute('target','_blank');
    }
  }

});