【问题标题】:jQuery selector for empty value空值的jQuery选择器
【发布时间】:2014-04-18 12:26:42
【问题描述】:

如何在 jQuery 中创建一个选择器以与 .is() 函数一起使用,它表示以下表达式:

$('[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

【问题讨论】:

  • 这不是重点。这只是一个例子,以避免像这样api.jquery.com/empty-selector
  • @Allyson, .is() 必须在此解决方案中使用。 为什么?使用is() 似乎与您想要达到的结果适得其反。
  • 您关于$('[name="Person[lastName]"]').is('[value=""]') 返回true 的声明似乎并非如此。该块中的代码似乎按预期工作。 jsfiddle.net/2CzWu/1
  • @FrédéricHamidi 我相信 OP 想要创建一个布尔表达式来模拟使用 .is() 方法的第一个代码块。
  • @RubenInfante 你是对的!声明有效,谢谢!我会关闭这个问题

标签: jquery jquery-selectors


【解决方案1】:

:empty 不起作用的原因是因为它正在寻找没有子节点的节点,这不是您要寻找的。​​p>

$.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

【讨论】:

  • 是的,我错过了我的项目中的一个错字:(
  • 操作可能真的错了。当我编辑 firstName 并执行此代码时,结果不正确
  • @AllysondePaula 那是因为jQuery.val('aaaa') 没有在节点上设置value 属性。如果你使用 jQuery.attr('value', 'aaaa') 它将起作用 jsfiddle.net/2CzWu/3 恐怕你无能为力
猜你喜欢
  • 2010-11-16
  • 2013-07-15
  • 2011-12-14
  • 2013-02-03
  • 2017-05-02
  • 2014-03-28
  • 1970-01-01
  • 2011-02-02
  • 2016-07-16
相关资源
最近更新 更多