jQuery 1.9.1 property selector

html, javascript, jquery, jquery-1.9

Solution

Using `.filter` seems to be the only way, but it's not too bad and you can actually make it a little more accurate by using `.val`:

$(":input").filter(function () { return $(this).val() === ""; });

If this really is that reprehensible to you, you could create a custom selector.

$.expr[':'].emptyInput = function (elem) {
    return $(elem).is(":input") && $(elem).val() === "";
};

http://jsfiddle.net/ExplosionPIlls/zaZPp/

EDIT: You may also be able to get away with using `this.value` instead of `$(elem).val()`.

Problem

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` : .prop() vs .attr() 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

Original source

Related problems