在forEach无效的情况下将类添加到元素数组中?

时间:2014-03-06 12:33:25

标签: javascript

我将querySelector()方法返回的节点列表转换为数组,但我仍然无法让forEach工作(我只想添加一个类)。有人能告诉我我做错了吗?

我的代码非常简单,因为我是JS的新手。

这是HTML:

<table>
    <tr>
        <th>This is a th</th>
        <th>This is a th</th>
        <th>Target</th>
        <th style="display: none;"></th>
    </tr>
    <tr>
        <td>This is a table cell</td>
        <td>This is a table cell</td>
        <td>Target</td>
        <td style="display: none;"></td>
    </tr>
</table>

JS:

(function(){

    "use strict";

    var th = Array.prototype.slice.call(document.querySelectorAll("th")),
        td = Array.prototype.slice.call(document.querySelectorAll("td"));

    function test(index, el, array) {
        el.className = "color";
    }

    th.forEach(test());


})();

4 个答案:

答案 0 :(得分:1)

你的论点顺序错了。这应该工作

(function(){

    "use strict";

    var th = Array.prototype.slice.call(document.querySelectorAll("th")),
        td = Array.prototype.slice.call(document.querySelectorAll("td"));

    function test(el, index, array) {
        el.className = "color";
    }

    th.forEach(test);


})();

答案 1 :(得分:0)

(function(){
        "use strict";
        var th = Array.prototype.slice.call(document.querySelectorAll("th")),
                td = Array.prototype.slice.call(document.querySelectorAll("td"));

        function test(el) {
            el.className = "color";
        }
        th.forEach(function(el){
            test(el);
        });
    })();

试试这个:

答案 2 :(得分:0)

首先,你在forEach中已经有th,所以你不需要再次传递它。

然后你应该这样做:

th.forEach(test);

或更改测试功能:

function test() {
    return function(index, el, array){
        el.className = "color";
    };
}
th.forEach(test());

答案 3 :(得分:0)

这是一个工作小提琴 http://jsfiddle.net/7pVD6/

(function(){

    "use strict";

    var th = Array.prototype.slice.call(document.querySelectorAll("th")),
        td = Array.prototype.slice.call(document.querySelectorAll("td"));

    function test(el) {
        el.className = "color";
    }

    th.forEach(function(el)
               {
                   test(el)
               });


})();

您应该在forEach中传递一个带有单个参数(元素)的回调 或直接通过测试(el)