2013-03-26 53 views

回答

1

使用纯JavaScript可以使用如下的querySelectorAll()功能:

var checkboxes = document.querySelectorAll('input[type="checkbox"]'); 

for(var i=0; i<checkboxes.length; i++) { checkboxes[i].checked = true; } 

不幸的是这并不能避免的循环,我知道你想避免和它也没有完美的跨浏览器的兼容性能被检查here与IE 8只能够挂钩到CSS 2.1选择器和Pre IE8根本不被支持,但它是最好的,可以做到,而无需使用大量的代码和避免jQuery。

我知道你想避免jQuery的,但如果你改变了主意,你可以尝试以下方法:

$('input[type="checkbox"]').attr('checked', 'checked') 

这应该钩在任何复选框,输入并设置其属性为选中使用jQuery attr()功能。

如果这不起作用尝试给您复选框自己的类名,如复选框,并尝试像如下:

$('.checkbox').attr('checked', 'checked') 

这将帮助兼容性问题,并能避免循环,但如果你不这样做想要去jQuery路线,然后请忽略。

+3

的问题问的纯JavaScript不jQuery的... – lifetimes 2013-03-26 01:10:13

+1

我不想使用jQuery,因为这将是我在页面中唯一的javascript ... – Alex 2013-03-26 01:11:09

+0

道歉!我错误阅读了这个问题,我读了这可以在jQuery中完成,而不是在jQuery中“喜欢”...道歉。希望这可以对别人有用,而我很快回来了实际的答案! – 2013-03-26 01:11:41

3

不,没有某种形式的节点迭代就无法完成。 jQuery也遍历节点,它只是隐藏了用户。

的一些新的jQuery般的风格最接近的是使用浏览器.forEach[MDN]它支持:

[].forEach.call(inputs, function() { 
    this.checked = true; 
}); 
3

不使用for循环

在某些时候,你需要某种形式的循环。你只是希望把它抽象出来吗?

NodeList s为Array样,所以你可以从Array.prototypecallapply方法,包括iteratorsforEach()。一个例子from MDN

另一种方法无需扩展DOM:

var forEach = Array.prototype.forEach; 

var links = document.getElementsByTagName('a'); 
forEach.call(links, function(link){ // works in most browsers (please document here if you find browsers where it doesn't) 
    link.style.color = '#0F0'; 
}); 

但要注意,即使forEach()depends on a loopwhile在这种情况下)。

相关问题