Decent Dabbler
Decent Dabbler

Reputation: 22783

A cleaner way to select by multiple possible attribute values?

Is there a possibility in jQuery to select by multiple possible attribute values without having to use a comma separated list of selectors.

So in stead of:

#list1 > option[value="1"], #list1 > option[value="2"], etc

Something like:

#list1 > option[value="1"|value="2"], etc

Upvotes: 24

Views: 17118

Answers (3)

mikewasmike
mikewasmike

Reputation: 388

You can do this

var valuesNeeded = [1,2,etc];

$('#list1 > option').filter(function( index ) {
    return valuesNeeded.indexOf($(this).attr('value')) != -1;
});

Upvotes: 0

MP.
MP.

Reputation: 41

You can make a custom jQuery function like this:

$.fn.filterAttrVals = function (attr, vals) {
    var filter = '[' + attr + '="' + vals.split(',').join('"],[' + attr + '="') + '"]';
    return this.filter(filter);
};

For your example you could use it in the following way:

$('#list1 > option').filterAttrVals('value','1,2');

Upvotes: 2

Richard Neil Ilagan
Richard Neil Ilagan

Reputation: 14747

Not that I know of. The cleanest way I can think of doing this is to first select using the common elements across all items, then just .find() or .filter() the OR values out.

Something like

$('#list1 > option[value]')
    .filter('[value="1"],[value="2"]')
    ;

Upvotes: 40

Related Questions