<div class="t">Hello</div>
<div class="t">Hello</div>

<script>
    function $$(name) {
        a = document.getElementsByTagName("*");
        for (var i = 0; i < a.length; i++) {
            if (a[i].className == name) return a[i];
        }
    }

    $$('t').style.color = "red";
</script>


只有类别为“ t”的第一个div变成红色。我做错了什么?

最佳答案

一旦找到匹配项,您将退出循环,因此根据定义,只有一个元素会被更改。

哦,如果您要匹配的元素上也有额外的类,那么您的代码将失败。

最好编写代码以对所有匹配的元素调用回调:

function $$(name, cb) {
    var a = document.getElementsByTagName("*");
    for (var i = 0; i < a.length; i++) {
        if (a[i].className == name) {
            cb.apply(a[i])
        }
    }
}

$$('t', function() {
    this.style.color = 'red';
});


或者,只需使用专为此类工作而设计的库(例如jQuery):

$('.t').css('color', 'red');

关于javascript - 尝试更改JavaScript中多个项目的属性,仅第一个项目正在更改,我在做什么错?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5910436/

10-12 07:07