Cool jQuery Predicate Selectors

Posted October 19, 2007 at 5:21 PM

Tags: Javascript / DHTML

I was reading up on jQuery last night and came across some cool jQuery predicate filtering in the selector statements. We have all seen the predicate for full attribute value matches:

 Launch code in new window » Download code as text file »

  • a[ @rel = 'nofollow' ]

This would select all the links in the document object model that have a REL attribute value of "nofollow". In addition to the "=" comparison operator, jQuery provides some additional regular-expression-esque comparison operators.

Start With: ^=

The ^= operator will filter elements whose attribute starts with the given value.

Ends With: $=

The $= operator will filter elements whose attribute ends with the given value.

Contains: *=

The *= operator will filter elements whose attribute contains the given value.

To test this, I whipped up a little demo page. On this demo page we have a number of list items, each of which have an ID that starts with "list" and ends with the one-based index of the list item. Then, we use the jQuery selectors from above to output the text of the matched elements:

 Launch code in new window » Download code as text file »

  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  • <html>
  • <head>
  • <title>jQuery Attribute Predicate Demo</title>
  • <script type="text/javascript" src="jquery.pack.js"></script>
  • </head>
  • <body>
  •  
  • <h1>
  • jQuery Attribute Predicate Demo
  • </h1>
  •  
  • <ul>
  • <li id="list1">One</li>
  • <li id="list2">Two</li>
  • <li id="list3">Three</li>
  • </ul>
  •  
  •  
  • <!---
  • Below are the test that we will run against
  • the unordered list above.
  • --->
  •  
  •  
  • <h2>
  • Tests / Results
  • </h2>
  •  
  • <h3>
  • Full Match: "li[ @id = 'list1' ]"
  • </h3>
  •  
  • <p>
  • <script type="text/javascript">
  • document.write(
  • $( "li[ @id = 'list1' ]" ).text()
  • );
  • </script>
  • </p>
  •  
  •  
  • <h3>
  • Start With Match: "li[ @id ^= 'list' ]"
  • </h3>
  •  
  • <p>
  • <script type="text/javascript">
  • document.write(
  • $( "li[ @id ^= 'list' ]" ).text()
  • );
  • </script>
  • </p>
  •  
  •  
  • <h3>
  • Ends With Match: "li[ @id $= '3' ]"
  • </h3>
  •  
  • <p>
  • <script type="text/javascript">
  • document.write(
  • $( "li[ @id $= '3' ]" ).text()
  • );
  • </script>
  • </p>
  •  
  •  
  • <h3>
  • Contains Match: "li[ @id *= 'st' ]"
  • </h3>
  •  
  • <p>
  • <script type="text/javascript">
  • document.write(
  • $( "li[ @id *= 'st' ]" ).text()
  • );
  • </script>
  • </p>
  •  
  • </body>
  • </html>

Running the above page, we get the following output:

Full Match: "li[ @id = 'list1' ]"

One

Start With Match: "li[ @id ^= 'list' ]"

OneTwoThree

Ends With Match: "li[ @id $= '3' ]"

Three

Contains Match: "li[ @id *= 'st' ]"

OneTwoThree

The more I read up on jQuery, the more I realize how sweet-ass it is. jQuery is the "Easy" button of the user interface world.


 
 
 

 
jQuery: The Easy Button For User Interface Development  
 
 
 

Download Code Snippet ZIP File

Post Comment  |  Ask Ben  |  Print Page




Reader Comments

Oct 20, 2007 at 12:08 PM // reply »
1 Comments

>> jQuery is the "Easy" button of the user interface world.

Exactly!

Thanks for this nice explanation of the various specific selectors.


Mar 16, 2009 at 9:57 AM // reply »
1 Comments

Quite interesting.
Note however that the code above will not work with jQuery v 1.3 and above.

You simply need to remove the "@".

More info at :
http://docs.jquery.com/Release:jQuery_1.3#Upgrading


Mar 16, 2009 at 10:03 AM // reply »
7,457 Comments

@Cypher,

That is correct. This XPath-like attribute selection was used, then deprecated, and now, in the latest releases, completely removed.


Vx
Apr 1, 2009 at 12:38 AM // reply »
4 Comments

so how do you do this in the new jQuery?


Vx
Apr 1, 2009 at 12:39 AM // reply »
4 Comments

never mind... see the comment by Ben, i can't find the api reference though? any link for that?


Apr 1, 2009 at 9:30 AM // reply »
7,457 Comments

@Vx,

Check out http://docs.jquery.com.


Vx
Apr 2, 2009 at 1:48 AM // reply »
4 Comments

:) I've been using that and a search through there doesn't show any results for Predicates, or *=
I haven't found it in the docs, could you?


Apr 2, 2009 at 8:31 AM // reply »
7,457 Comments

@Vx,

Check out Attribute Filters in the Selectors section:

http://docs.jquery.com/Selectors

Basically, in newer version of jQuery, you just have to remove teh @ sign.


Vx
Apr 3, 2009 at 12:14 AM // reply »
4 Comments

Ahh I see it now... Thanks :)
I've been through the selectors page a dozen times, i wonder how i missed it! hehe.
$("input[id*='wait'][hidden]").val() would work now...
Thanks


Apr 3, 2009 at 8:07 AM // reply »
7,457 Comments

@Vx,

No problem man, glad you got it working.


Nov 19, 2009 at 6:21 PM // reply »
1 Comments

For anyone who's interested I've published V2 of a jQuery reference if you want to have a look at that it's here: http://www.skidoosh.co.uk/jquery/jquery-selectors-and-attribute-selectors-reference-and-examples-v2/ I'll be updating it for 1.3 in a few days.


Post Comment  |  Ask Ben

Recent Blog Comments
Tim
Mar 9, 2010 at 11:21 PM
DreamWeaver CS3 Slows Me Down
Revisiting the slow upload probs. On Vista & DW CS3 I had long waits when uploading locally and to a SFTP server. "Maintain synchronization information" within the site definition was the problem. Un ... read »
Mar 9, 2010 at 6:57 PM
Terms Of Service / Privacy Policy Document Generator
Thanks so much!!!! Definitely going to refer this to others. ------- Yanike Mann http://www.yeoworks.com ... read »
Mar 9, 2010 at 5:03 PM
Ask Ben: Javascript Replace And Multiple Lines / Line Breaks
Hello Ben, I'm having a lot of problems with a function that transform an single-line input-given value in a slug. The function is: function slug(fromm, tooo) { if (document.getElementById(fromm)) { ... read »
Mar 9, 2010 at 4:47 PM
ColdFusion, jQuery, And "AJAX" File Upload Demo
Oh, for crying out loud! Never mind, I figured it out! (slapping myself up side the head). It's been a really long day. Ok, so this works perfectly. Thank you for the great code! And for letti ... read »
Mar 9, 2010 at 4:38 PM
ColdFusion, jQuery, And "AJAX" File Upload Demo
I'm having a bugger of a time with this. I'm trying to use it with PHP instead. I know the PHP script works fine without the javascript (just submitting a regular form) and according to FireBug, th ... read »
Mar 9, 2010 at 4:25 PM
Calculating Your Weight Lifting Rep Maximum Using ColdFusion
The reason for the percentages being different work intensities for shoulders vs bench press is that there is further formulas required which integrate co-efficients relative to muscle mechanics for ... read »
Mar 9, 2010 at 4:01 PM
Ask Ben: Reading In A File Using CFFile And CFInclude
Ben, do you know what is the size of the file CFFILE can read into one variable. I have a big text file which is 350 K with over 250 K records. It seems that ColdFusion refuse to read the file into ... read »
Mar 9, 2010 at 3:36 PM
Ask Ben: Getting The Start And End Dates Of The Previous Week In ColdFusion
Is this example providing the previous week or is it providing a span of 7 days which may include last week? ... read »