2016-04-20 106 views
0

在此for循環中爲什麼不循環所有輸入?在for循環中選擇項目

我試着在jQuery的每次工作..但我想用for循環做我錯過了什麼

我想補充類所有輸入不具有類.typeLimit,然後選擇項目的環

https://jsfiddle.net/6v8arLqa/

var type = 'number'; 

for (var i = 0; i < $('input[data-type-limit="' + type + '"]').not('.typeLimit').length; i++) { 
    console.log(i) 
    var input = $('input[data-type-limit="' + type + '"]').not('.typeLimit').eq(i); 
    console.log(input) 
    input.addClass('typeLimit'); 
} 


<input type="text" data-type-limit="number" placeholder=":1"> 
<input type="text" data-type-limit="number" placeholder=":2"> 
<input type="text" data-type-limit="number" placeholder=":3"> 
<input type="text" data-type-limit="number" placeholder=":4"> 
<input type="text" data-type-limit="number" placeholder=":5"> 
<input type="text" data-type-limit="number" placeholder=":6"> 
<input type="text" data-type-limit="number" placeholder=":7"> 
<input type="text" data-type-limit="number" placeholder=":8"> 
<input type="text" data-type-limit="number" placeholder=":9"> 
<input type="text" data-type-limit="number" placeholder=":10"> 

測試與每個

$.each($('input[data-type-limit="' + type + '"]').not('.typeLimit'), function(i, val) { 
console.log(i) 
     var input = $(this); 
     input.addClass('typeLimit'); 
    }); 

回答

1

因爲每次你經過循環,$('input[data-type-limit="' + type + '"]').not('.typeLimit')的內容都在改變,所以你會跳過一些元素。爲了防止這個問題(並且效率更高),您可以緩存結果並完成這些結果。

var $noTypeLimit = $('input[data-type-limit="' + type + '"]').not('.typeLimit'); 
for (var i = 0; i < $noTypeLimit.length; i++) { 
    var $input = $noTypeLimit.eq(i); 
    $input.addClass('typeLimit'); 
} 

或者如果你只是在給他們添加一個類,你可以更簡化它。答覆

$('input[data-type-limit="' + type + '"]') 
    .not('.typeLimit') 
    .addClass('typeLimit'); 
+0

感謝,它的工作原理我用第一種方法緩存他們,如果我這樣做有什麼不同的表現與jQuery比較每個 – user1575921

+1

這種方式是比任何其他選項更快。您可以節省更多的DOM查詢,而且不必執行一堆其他函數調用。 –