0

我希望当我点击一个链接时,所有“选定”的类都将被删除,只有点击的链接将被归类为选定的类

window.onload = function() {
    var link = document.getElementById('subMenu').getElementsByTagName('a');

    for(var i = 0; i < link.length; i++) {
          link[i].onclick = function() {
              link.removeAttribute('class');
              this.setAttribute('class', 'selected');
          }
    }
}

萤火虫:

TypeError: link.removeAttribute is not a function
link.removeAttribute('class');
4

1 回答 1

3

link是您从中获得的集合.getElementsByTagName('a'),并且没有removeAttribute方法。要引用循环中的特定项目,您应该使用:

this.removeAttribute("class");

由于您已经了解循环遍历集合和修改集合中每个项目的概念,并且正在使用thisfor setAttribute(),因此您应该继续使用this来引用您正在修改的集合中的当前项目。

事件处理程序中的值是this指事件绑定到的元素,这是您似乎想要修改(并且已经在修改)的元素。

另外,我不确定您的代码的重点,因为您删除了该class属性然后立即重新设置它。如果您确实需要设置属性,则没有理由首先将其删除。如果您只想更改/设置class,请使用:

this.className = "selected";

根据您的编辑,您可能希望使用:

window.onload = function() {
    var link = document.getElementById('subMenu').getElementsByTagName('a');

    for (var i = 0; i < link.length; i++) {
        link[i].onclick = linkClickHandler;
    }
};

function linkClickHandler() {
    var links = document.getElementById("subMenu").getElementsByTagName("a");
    for (var i = 0; i < links.length; i++) {
        if (links[i] !== this) {
            links[i].className = "";
        } else {
            links[i].className = "selected";
        }
    }
}

click这将为所有找到的元素绑定处理程序。在处理程序中,它循环遍历所有原始元素 - 它为单击的元素设置classas "selected",并将class所有其他元素设置为""

于 2013-05-03T23:55:23.987 回答