2013-03-26 52 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在這種情況下)。

相關問題