0

.is()次の式を表すjQueryの関数で使用するセレクターを作成するにはどうすればよいですか:

$('[name="Person[firstName]"]').val() === ''; // true
$('[name="Person[lastName]"]').val() === ''; // false

この HTML コンテキストで

<input name="Person[firstName]" value="" >
  <foo bar="true" />
</input>

<input name="Person[lastName]" value="ABCDEFGH" />

:empty Selector 子を持たないすべての要素 (テキスト ノードを含む) を選択します。

 $('[name="Person[firstName]"]').is(':empty'); // false
 $('[name="Person[lastName]"]').is(':empty'); // true

別の試み

$('[name="Person[firstName]"]').is('[value=""]'); // true
$('[name="Person[lastName]"]').is('[value=""]'); // true

注:これは知識を目的とした質問です。このソリューションでは.is()を使用する必要があります。

@edit http://jsfiddle.net/2CzWu/2/

両方の式で false を返す必要があります

4

1 に答える 1

5

動作しない理由:emptyは、子ノードのないノードを探しているためです。これは、探しているものではありません。

$.is("[value='']")スクリプトまたはUIのいずれかを使用して更新する場合ではなく、最初にHTMLで設定された値でのみ機能します。これはNode.getAttribute('value') === '' 、DOMオブジェクトがである場合に属性セレクターが調べてXML属性が更新されないためですが、DOMプロパティHTMLInputElement.valueは更新されます。

したがって、本当に必要なのは、値のDOMプロパティを調べるカスタム疑似セレクターであり、実装は非常に簡単です。それは$.isと一緒に動作します:not()

$.expr[':'].emptyVal = function(obj){
   return obj.value === '';
};

var $firstName = $('[name="Person[firstName]"]');

$firstName.val('AAAA');

$('input:emptyVal').size(); // 2
$('input:not(emptyVal)').size(); // 0
$firstName.is('input:emptyVal'); // false
$firstName.is('input:not(:emptyVal)'); // true
于 2013-03-20T00:01:07.840 に答える