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

This commit is contained in:
Corey Jewett 2007-04-13 17:48:04 +00:00
parent bfe5f89106
commit 2fac5e7949
2 changed files with 7 additions and 2 deletions

View File

@ -56,6 +56,9 @@ jQuery.extend({
"$=": "z&&z.substr(z.length - m[4].length,m[4].length)==m[4]", "$=": "z&&z.substr(z.length - m[4].length,m[4].length)==m[4]",
"*=": "z&&z.indexOf(m[4])>=0", "*=": "z&&z.indexOf(m[4])>=0",
"": "z", "": "z",
// these are for evaling in a regexp.
"=~": "eval(m[4]).test(z)",
"!~": "!eval(m[4]).test(z)",
_resort: function(m){ _resort: function(m){
return ["", m[1], m[3], m[2], m[5]]; return ["", m[1], m[3], m[2], m[5]];
}, },
@ -67,7 +70,7 @@ jQuery.extend({
// The regular expressions that power the parsing engine // The regular expressions that power the parsing engine
parse: [ parse: [
// Match: [@value='test'], [@foo] // Match: [@value='test'], [@foo]
/^\[ *(@)([\w-]+) *([!*$^=]*) *('?"?)(.*?)\4 *\]/, /^\[ *(@)([\w-]+) *([!*$^=!~]*) *('?"?)(.*?)\4 *\]/,
// Match: [div], [div p] // Match: [div], [div p]
/^(\[)\s*(.*?(\[.*?\])?[^[]*?)\s*\]/, /^(\[)\s*(.*?(\[.*?\])?[^[]*?)\s*\]/,

View File

@ -183,7 +183,7 @@ test("pseudo (:) selectors", function() {
}); });
test("basic xpath", function() { test("basic xpath", function() {
expect(15); expect(17);
ok( jQuery.find("//*").length >= 30, "All Elements (//*)" ); ok( jQuery.find("//*").length >= 30, "All Elements (//*)" );
t( "All Div Elements", "//div", ["main","foo"] ); t( "All Div Elements", "//div", ["main","foo"] );
t( "Absolute Path", "/html/body", ["body"] ); t( "Absolute Path", "/html/body", ["body"] );
@ -194,6 +194,8 @@ test("basic xpath", function() {
t( "All Children, Implicit", "//code/", ["anchor1","anchor2"] ); t( "All Children, Implicit", "//code/", ["anchor1","anchor2"] );
t( "Attribute Exists", "//a[@title]", ["google"] ); t( "Attribute Exists", "//a[@title]", ["google"] );
t( "Attribute Equals", "//a[@rel='bookmark']", ["simon1"] ); 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( "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"] );
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"] );