2012-01-31 53 views
1

我正在使用以下jQuery代码来计算具有与其标题属性相同的值的文本字段的数量。jQuery选择不包含特定值的元素

$(".textfield").val($(".textfield").attr('title')).size(); 

问题:我怎么数着文本字段的数量已经等于其标题属性的值?

回答

1

首先,你发布的代码没有做你说的那样。这:

$(".textfield").val($(".textfield").attr('title')).size(); 

威尔设置带班“.textfield”第一个“.textfield”元素的title属性的标题所有元素的值,然后返回所有的人的数量。

您需要将方法的返回值(无参数返回当前值)与.attr('title')方法的返回值进行比较。你可以用.filter()做到这一点,然后检查所生成的jQuery对象的.length

$('.textfield').filter(function() { 
    var $this = $(this); 
    return $this.val() == $this.attr('title'); 
}).length; 

然后让这些计数当值不等于只是做同样的事情,除了与!=,而不是==。所以:

$('.textfield').filter(function() { 
    var $this = $(this); 
    return $this.val() != $this.attr('title'); 
}).length; 

(注意:.length会给你同样的算作.size(),但没有一个函数调用的开销。)

+0

它是'textfield'而不是'textbox' – gdoron 2012-01-31 04:32:05

+0

Thanks @gdoron。固定。 – nnnnnn 2012-01-31 05:04:49

1

我会使用filter()然后访问返回集的length属性。

var count = $('.textfield').filter(function() { 
       return $(this).val() != $(this).attr('title'); 
      }).length; 

你也很可能逃脱的filter()作为return this.value != this.title身体。

+0

德勤的!我只是张贴:) – Eli 2012-01-31 04:11:45

+0

不错。只需将$(this)保存为$ this,不需要在同一行中执行两次... – gdoron 2012-01-31 04:20:45

+0

@gdoron听起来像是微型优化,不值得额外的代码行。 – alex 2012-01-31 04:36:18

0
  • 使用filter功能。
  • 使用length属性选择

var length = $('.textfield').filter(function() { 
       return this.value != this.title; 
      }).length; 
相关问题