From 2fac5e7949ec342c450b2e032509eed0e35cf1ff Mon Sep 17 00:00:00 2001 From: Corey Jewett Date: Fri, 13 Apr 2007 17:48:04 +0000 Subject: [PATCH] Add RegExp style xpath attributes and testcases. e.g. [@foo =~ /bar/i] and [@foo !~ /bar/] --- src/selector/selector.js | 5 ++++- src/selector/selectorTest.js | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/selector/selector.js b/src/selector/selector.js index 48c6e1573..d6d87c03c 100644 --- a/src/selector/selector.js +++ b/src/selector/selector.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*\]/, diff --git a/src/selector/selectorTest.js b/src/selector/selectorTest.js index 857d9c7b0..23f44c30d 100644 --- a/src/selector/selectorTest.js +++ b/src/selector/selectorTest.js @@ -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"] );