背景
自从jQuery 1.9版本开始,.attr(..)
方法不再返回属性值,而是现在我们必须使用.prop(..)
。不幸的是,这也适用于通过属性选择器指定的属性,即$("input[value=]")
。
参见http://jquery.com/upgrade-guide/1.9/#attr-versus-prop-和一个关于.attr
和.prop
之间差异的很好的SO讨论:
我的情况
我目前正在使用像$("input[value=]")
和$("select[value=]")
这样的选择器来选择没有设置值的输入元素。然而,这在jQuery 1.9中不再起作用,现在我正在做类似下面这样的事情:
var hasValue = function () { return !!($(this).val().length); };
var hasNoValue = function () { return !($(this).val().length); };
$("input").filter(hasValue);
$("select").filter(hasValue);
我的实际选择器稍微复杂一些,可以检查具有或不具有值的多个元素,所以现在我不得不将我的一个选择器字符串拆分成多个选择器,并在这些选择器之间使用.filter(...)方法调用。
问题
是否有与$("[value=]")
, $("[value!=]")
, $("[value='abc']")
等效的,但使用属性而不是属性的方法?如果没有,是否有更简洁的方法来使用.filter(hasValue)
和.filter(hasNoValue)
方法?
谢谢
[value]
而不是[value=]
,两者都可以吗? - Chris Laplante[value=""]
而不是[value]
,因为后者会选择任何具有值属性的元素。 - adeneo$('input, select, textearea').filter(function(){ return !!this.value; })
- Fabrício Matté