2016-04-20 109 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查询,而且不必执行一堆其他函数调用。 –