Ankur
Ankur

Reputation: 51100

jQuery filter() - filtering on multiple attributes

I want to filter based on two attributes, the first is id and the second is called level

i.e. id="someId" level="someLevel"

Shouldn't this code do the trick ... it doesn't seem to work.

$(".someClass").filter("#"+id, "[level='"+level+"']").someAction();

Upvotes: 3

Views: 8800

Answers (4)

Shay Erlichmen
Shay Erlichmen

Reputation: 31928

If its an or condition you should really have a helper function like string format:

string.Format = function( text )
{
    //check if there are two arguments in the arguments list
    if ( arguments.length <= 1 )
    {
        //if there are not 2 or more arguments there’s nothing to replace
        //just return the original text
        return text;
    }
    //decrement to move to the second argument in the array
    var tokenCount = arguments.length - 2;
    for( var token = 0; token <= tokenCount; token++ )
    {
        //iterate through the tokens and replace their placeholders from the original text in order
        text = text.replace( new RegExp( "\\{" + token + "\\}", "gi" ),
                                                arguments[ token + 1 ] );
    }
    return text;
};

and then its easy:

var filter = string.format("#{0}, [level='{1}']", id, level);
$(".someClass").filter(filter).someAction();

Upvotes: 0

Dario
Dario

Reputation: 343

what about

$(".someClass").filter("filter1").filter("filter2") 

?

Upvotes: 3

Matt
Matt

Reputation: 44058

You can use a Multiple Attribute Selector in your filter function.

Upvotes: 2

&#193;lvaro Gonz&#225;lez
&#193;lvaro Gonz&#225;lez

Reputation: 146410

You are providing two arguments:

.filter("#someId", "[level='someLevel']")

You probably want this:

.filter("#someId[level=someLevel]")

Upvotes: 3

Related Questions