Background
As of jQuery 1.9 the .attr(..)
method no longer returns property values, instead we now have to use .prop(..)
. Unfortunately this also applies to attributes specified via an attributes selector i.e. $("input[value=]")
See http://jquery.com/upgrade-guide/1.9/#attr-versus-prop-
and a good SO discussion on the differences between .attr
and .prop
:
My Situation
I'm currently using selectors like $("input[value=]")
and $("select[value=]")
to select input elements that have no value set. However, this no longer works with jQuery 1.9, instead I'm now doing something like this:
var hasValue = function () { return !!($(this).val().length); };
var hasNoValue = function () { return !($(this).val().length); };
$("input").filter(hasValue);
$("select").filter(hasValue);
My actual selectors are a little larger, checking multiple elements with or without values so now I'm having to split my 1 selector string into multiple selectors with .filter(..) method calls in between.
Question
Is there an equivalent to $("[value=]")
, $("[value!=]")
, $("[value='abc']")
which uses the property instead of the attribute? And if not, is there a cleaner way than using the .filter(hasValue)
and .filter(hasNoValue)
methods?
Thanks
[value]
instead of[value=]
? Or do both work? – Georginageorgine[value=""]
as just[value]
would select any element with a value attribute. – Glutamate$('input, select, textearea').filter(function(){ return !!this.value; })
– Oidea