2013-03-19 43 views
0

我怎么能创建一个选择在jQuery的.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" /> 

:空选择选择没有子项的所有元素(包括文本节点)。

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

闯闯

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

注:这是对知识的目的的问题 - 。是()必须在此解决方案中使用。

@edit​​

它必须在两个表达式

+1

THAS不是重点。这只是一个例子,以避免像这样的http://api.jquery.com/empty-selector/ – 2013-03-19 23:51:59

+1

@Allyson,*和'.is()'必须在这个解决方案中使用。*为什么?使用is()似乎对你想达到的结果产生反作用。 – 2013-03-19 23:52:55

+2

您的声明'$('[name =“Person [lastName]”]')。('[value =“”]')'returns'true'似乎不是这种情况。该块中的代码似乎按照我的预期工作。 http://jsfiddle.net/2CzWu/1/ – 2013-03-19 23:55:08

回答

5

原因:empty不起作用的,因为它在寻找节点没有子节点,这是不是你在找什么返回false。

$.is("[value='']")只适用于最初在HTML中设置的值,而不是通过脚本或UI更新它。这是因为属性选择器查看Node.getAttribute('value') === ''and the XML attribute is not updated when the DOM object is,但DOM属性HTMLInputElement.value

So what we really need is a custom pseudo selector that looks at the value DOM propertyit's pretty simple to implement。它的工作原理与$.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 
+0

是我错过了我的项目上的错字:( – 2013-03-20 00:07:40

+0

Ops也许它是错误的当我编辑firstName并执行此代码的结果是不正确的 – 2013-03-20 00:48:11

+0

http://jsfiddle.net/2CzWu/2/ – 2013-03-20 00:54:02