2010-04-10 72 views
2

您認爲jquery可以幫助我更快地獲得以下腳本工作嗎? 謝謝!我可以用jquery更有效地寫這個javascript嗎?

window.onload=function colorizeCheckedRadios(){      
    var inputs = document.getElementsByTagName("input"); 
    if (inputs) { 
     for (var i = 0; i < inputs.length; ++i) { 
      if(inputs[i].checked&&inputs[i].type=="radio"){ 
       inputs[i].parentNode.parentNode.style.backgroundColor='#FCE6F4'; 
      } 
     }  
    } 
} 

回答

8

更快,我不知道。清潔和跨瀏覽器:是的

$(function() { 
    $('input:radio:checked').parent().parent().css('background-color', '#FCE6F4'); 
}); 
+1

+1爲了清潔和兼容性。更快,很可能不會 - 絕對不在不存在'querySelectorAll()'的瀏覽器中。 – 2010-04-10 21:27:50

+0

感謝您的快速解答!我實現了代碼,對我來說似乎更快一些。我在Firefox 3.6上。非常感謝!這是乾淨的代碼。 – Haluk 2010-04-10 21:38:30

+0

在實現'querySelectorAll'的瀏覽器上實際上可能會快一點,不過無論如何速度差異應該可以忽略不計。 – 2010-04-10 22:12:50

2

你可以做到這一點的版本使用jQuery:

$(function() { 
    $(":radio:checked").parent().parent().css('background-color', '#FCE6F4'); 
}); 

所以,是的,你可以苗條下來一點:)

如果你知道是什麼你想要的父母是<span>,你可以這樣做:

$(function() { 
    $(":radio:checked").closest('span').css('background-color', '#FCE6F4'); 
}); 
0

是的,可能。 jQuery有jQuery.ready()方法,它在DOM完成時執行該函數,而不是在加載所有圖像時執行該函數。請參閱:http://15daysofjquery.com/quicker/4/

+0

爲什麼downvote,請...?一個解釋會教我和其他人。 – Dor 2010-04-10 21:29:32

3

不,因爲jQuery將解析代碼中使用的jQuery選擇器,所以它會變慢。

+1

速度方面,它應該沒什麼區別,特別是因爲jQuery的寫法。 – 2010-04-10 21:27:21

+0

@Josh K:你說得對,它不會產生很多差異,但速度會變慢。這個問題問jQuery是否會使腳本更快,更高效。這個問題的答案是否定的。 – 2010-04-10 21:32:02

+0

如果你真的擔心這裏的選擇器,就不要使用選擇器:'$(document.getElementsByTagName('input'))...'並且它的工作原理是一樣的。 – 2010-04-10 21:51:07

0

如果你有一個有名的祖先元素,可以幫助你排除大部分網頁的其餘部分,這將大大加快你的選擇。

... tons of html 
<div id="radioButtonList"> 
... the various radio button divs or what nots 
</div> 
... tons more html 

$(function() { 
    $("#radioButtonList :radio:checked").parent().parent().css('background-color', '#FCE6F4'); 
});