@@ -44,7 +44,7 @@ function getUriProperty(elem) {
4444 return property ;
4545}
4646
47- var pseudo = / ^ ( [ a - z A - Z ] + ) \s * ( [ \^ \$ * ] ? = ) \s * ( [ ' " ] ? ) ( .+ ) \3| ^ \s * ( [ a - z A - Z 0 - 9 ] + ) \s * $ / ,
47+ var pseudo = / ^ ( [ a - z A - Z ] + ) \s * ( [ \^ \$ * ] ? = | : ) \s * ( [ ' " ] ? ) ( .+ ) \3| ^ \s * ( [ a - z A - Z 0 - 9 ] + ) \s * $ / ,
4848 comparable = { } ,
4949 // https://developer.mozilla.org/en/CSS/Attribute_selectors
5050 compare = {
@@ -65,6 +65,12 @@ var pseudo = /^([a-zA-Z]+)\s*([\^\$*]?=)\s*(['"]?)(.+)\3|^\s*([a-zA-Z0-9]+)\s*$/
6565 // contains
6666 '*=' : function ( value , target ) {
6767 return ! ! ( value + "" ) . match ( new RegExp ( escapeRegEx ( target ) , 'i' ) ) ;
68+ } ,
69+ 'equals:' : function ( uri , target ) {
70+ return uri . equals ( target ) ;
71+ } ,
72+ 'is:' : function ( uri , target ) {
73+ return uri . is ( target ) ;
6874 }
6975 } ;
7076
@@ -145,16 +151,16 @@ $.expr.filters.uri = function(elem, index, matches) {
145151 // - https://github.com/jquery/sizzle/wiki/Sizzle-Home
146152 // - https://github.com/jquery/sizzle/blob/master/sizzle.js#L626
147153
148- // skip anything without src|href|action
149- if ( ! getUriProperty ( elem ) ) {
154+ // skip anything without src|href|action and bad :uri() syntax
155+ if ( ! getUriProperty ( elem ) || ! matches [ 3 ] ) {
150156 return false ;
151157 }
152158
153159 var t = matches [ 3 ] . match ( pseudo ) ,
154160 property ,
155161 uri ;
156162
157- if ( ! t || ( ! t [ 5 ] && ! compare [ t [ 2 ] ] ) ) {
163+ if ( ! t || ( ! t [ 5 ] && t [ 2 ] !== ':' && ! compare [ t [ 2 ] ] ) ) {
158164 // abort because the given selector cannot be executed
159165 // filers seem to fail silently
160166 return false ;
@@ -164,6 +170,14 @@ $.expr.filters.uri = function(elem, index, matches) {
164170
165171 if ( t [ 5 ] ) {
166172 return uri . is ( t [ 5 ] ) ;
173+ } else if ( t [ 2 ] === ':' ) {
174+ property = t [ 1 ] . toLowerCase ( ) + ':' ;
175+ if ( ! compare [ property ] ) {
176+ // filers seem to fail silently
177+ return false ;
178+ }
179+
180+ return compare [ property ] ( uri , t [ 4 ] ) ;
167181 } else {
168182 property = t [ 1 ] . toLowerCase ( ) ;
169183 if ( ! comparable [ property ] ) {
0 commit comments