javascript - 试图在 JavaScript 中更改多个项目的属性,只有第一个项目正在改变,我做错了什么?

标签 javascript

<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/

相关文章:

javascript - 使用 javascript 和 laravel 选择 (onchange) 事件

javascript - 用于文本区域的 Onchange AJAX 在 Safari 中不起作用

java - Play Framework : load javascript only on specific method calls

javascript - 如何将参数传递给 JavaScript 函数?

javascript - 如何迭代 Google Analytics 配置文件 ID?

javascript - 更改 javascript 文件时 Webpack 2 不重新加载

javascript - 为什么 Angular.element/jqlite 找不到顶级元素?

javascript - react.js/axios - 如何在 cookie 中存储 csrf token

javascript - 使用 Jest 测试 Angular 应用程序 - Jest 遇到意外标记

javascript - javascript 字典的键不存储为值,而是存储为变量名