我将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());
})();
答案 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)