Skip to content
Permalink
Browse files

Add RegExp style xpath attributes and testcases. e.g. [@foo =~ /bar/i…

…] and [@foo !~ /bar/]
  • Loading branch information
coreyjewett committed Apr 13, 2007
1 parent bfe5f89 commit 2fac5e7949ec342c450b2e032509eed0e35cf1ff
Showing with 7 additions and 2 deletions.
  1. +4 −1 src/selector/selector.js
  2. +3 −1 src/selector/selectorTest.js
@@ -56,6 +56,9 @@ jQuery.extend({
"$=": "z&&z.substr(z.length - m[4].length,m[4].length)==m[4]",
"*=": "z&&z.indexOf(m[4])>=0",
"": "z",
// these are for evaling in a regexp.
"=~": "eval(m[4]).test(z)",
"!~": "!eval(m[4]).test(z)",
_resort: function(m){
return ["", m[1], m[3], m[2], m[5]];
},
@@ -67,7 +70,7 @@ jQuery.extend({
// The regular expressions that power the parsing engine
parse: [
// Match: [@value='test'], [@foo]
/^\[ *(@)([\w-]+) *([!*$^=]*) *('?"?)(.*?)\4 *\]/,
/^\[ *(@)([\w-]+) *([!*$^=!~]*) *('?"?)(.*?)\4 *\]/,

// Match: [div], [div p]
/^(\[)\s*(.*?(\[.*?\])?[^[]*?)\s*\]/,
@@ -183,7 +183,7 @@ test("pseudo (:) selectors", function() {
});

test("basic xpath", function() {
expect(15);
expect(17);
ok( jQuery.find("//*").length >= 30, "All Elements (//*)" );
t( "All Div Elements", "//div", ["main","foo"] );
t( "Absolute Path", "/html/body", ["body"] );
@@ -194,6 +194,8 @@ test("basic xpath", function() {
t( "All Children, Implicit", "//code/", ["anchor1","anchor2"] );
t( "Attribute Exists", "//a[@title]", ["google"] );
t( "Attribute Equals", "//a[@rel='bookmark']", ["simon1"] );
t( "Attribute RegExp", "//a[@rel=~/BooKmaRk/i]", ["simon1"] );
t( "Attribute Inverse RegExp", "//a[@id!~/mon/]", ["google","groups","anchor1","mark","yahoo","anchor2"] );
t( "Parent Axis", "//p/..", ["main","foo"] );
t( "Sibling Axis", "//p/../", ["firstp","ap","foo","first","firstUL","empty","form","floatTest","iframe","lengthtest","sndp","en","sap"] );
t( "Sibling Axis", "//p/../*", ["firstp","ap","foo","first","firstUL","empty","form","floatTest","iframe","lengthtest","sndp","en","sap"] );

0 comments on commit 2fac5e7

Please sign in to comment.
You can’t perform that action at this time.