2012-01-31 33 views
4

我有很多文本字段,我需要选择那些文本字段的值不等于它们的title属性。使用jQuery过滤器()获取所有匹配的.val()

问题:随着我的尝试,下面的jQuery代码只是选择第一个匹配的文本字段的值。如何获得所有匹配的文本框的值?

jQuery代码

var inputs = $(".input").filter(function() { 
       return $(this).val() != $(this).attr('title'); 
      }).val(); 
console.log(inputs); 

回答

5

下面是简单的解决办法:

var input = []; 
jQuery('input[type=text]').each(function(){ 
    if(jQuery(this).val() != jQuery(this).attr('title')) { 
    input.push(jQuery(this).val()); 
    } 
}); 
+0

使用这种方法,似乎不是将文本字段值存储在数组中,而是存储了匹配的DOM元素的HTML ...你也得到了吗? – Nyxynyx 2012-01-31 16:27:01

+0

不,我测试过这个解决方案,并且正如你所看到的,我显然将价值推向数组 – Nurlan 2012-01-31 16:40:32

3

.val()该方法只返回在元件的所选择的列表中的第一元素的值。尝试把它变成一个数组来代替:

var inputs = $(".input").filter(function() { 
    return $(this).val() != $(this).attr('title'); 
}).map(function(){ 
    return $(this).val(); 
}).get(); 
console.log(inputs); 
+0

是' .get()'链接到最后需要吗?我尝试了使用和不使用'.get()'的链接,并在Chrome的开发者控制台中得到了相同的结果... – Nyxynyx 2012-01-31 06:05:20

+3

它是,而事实并非如此。 jQuery对象在技术上是数组,但它们包含您可能不需要的其他属性和方法。使用'.get()'把它变成一个本地数组而不是一个包含字符串数组的jQuery对象。 – 2012-01-31 06:09:44

3

这里有一个办法做到这一点:

var inputs = []; 
$(".input").filter(function() { 
    return $(this).val() != $(this).attr('title'); 
}).each(function() { 
    inputs.push($(this).val()); 
}); 
console.log(inputs); 

例子:http://jsfiddle.net/grc4/cCRfE/

+0

谢谢!我尝试使用数组并最初推送它们,但是没有意识到'.each()'将对此有用。 – Nyxynyx 2012-01-31 06:06:45

相关问题