2010-11-24 26 views
3

Je voudrais compter toutes les entrées de mon formulaire qui sont vides. Avec vide, je veux dire que sa valeur est vide après avoir réduit sa valeur (si l'utilisateur insère aussi son vide). Ce jquery les compter, mais il ne comprend pas le parage:Est-il possible de faire un trim dans un sélecteur?

$(':text').filter('[value=""]').length 

a-jquery quelque chose qui peut être utilisé pour couper dans le sélecteur?

grâce

Répondre

11
$(':text').filter(function() { 
    return $.trim($(this).val()).length === 0; 
}); 
+0

+1 m'a devancé. ;) – Stephen

+0

Oui, cela devrait fonctionner. – RussellUresti

9

Alors que the .filter() method dans @ la réponse de Domenic est une bonne approche, je serais mettre en œuvre un peu différemment.

Exemple:http://jsfiddle.net/patrick_dw/mjuyk/

$('input:text').filter(function() { 
    return !$.trim(this.value); 
}); 
  • Vous devez spécifier input:text. Sinon jQuery doit observer chaque élément dans le DOM pour voir si c'est type='text'. (See the docs.)
  • Parce que ce sont des entrées de texte, il est plus rapide d'utiliser this.value que $(this).val().
  • Inutile d'obtenir la propriété length puisqu'une chaîne vide est falsey. Il suffit donc d'utiliser l'opérateur !.

Ou vous pouvez utiliser l'inverse de .filter(), qui est the .not() method:

Exemple:http://jsfiddle.net/patrick_dw/mjuyk/1/

$('input:text').not(function() { 
    return $.trim(this.value); 
}); 

En outre, vous pouvez créer un sélecteur personnalisé comme ceci:

Exemple:http://jsfiddle.net/patrick_dw/mjuyk/2/

$.extend($.expr[':'], { 
    novalue: function(elem, i, attr){ 
     return !$.trim(elem.value); 
    } 
}); 

$('input:text:novalue')