@@ -174,6 +174,27 @@ $.each( [ "Width", "Height" ], function( i, name ) {
} ) ;
// selectors
function focusable ( element , isTabIndexNotNaN ) {
var nodeName = element . nodeName . toLowerCase ( ) ;
if ( "area" === nodeName ) {
var map = element . parentNode ,
mapName = map . name ,
img ;
if ( ! element . href || ! mapName || map . nodeName . toLowerCase ( ) !== "map" ) {
return false ;
}
img = $ ( "img[usemap=#" + mapName + "]" ) [ 0 ] ;
return ! ! img && visible ( img ) ;
}
return ( / input| select| textarea| button| object/ . test ( nodeName )
? ! element . disabled
: "a" == nodeName
? element . href || isTabIndexNotNaN
: isTabIndexNotNaN )
// the element and all of its ancestors must be visible
&& visible ( element ) ;
}
function visible ( element ) {
return ! $ ( element ) . parents ( ) . andSelf ( ) . filter ( function ( ) {
return $ . curCSS ( this , "visibility" ) === "hidden" ||
@@ -187,30 +208,13 @@ $.extend( $.expr[ ":" ], {
} ,
focusable : function ( element ) {
var nodeName = element . nodeName . toLowerCase ( ) ,
tabIndex = $ . attr ( element , "tabindex" ) ;
if ( "area" === nodeName ) {
var map = element . parentNode ,
mapName = map . name ,
img ;
if ( ! element . href || ! mapName || map . nodeName . toLowerCase ( ) !== "map" ) {
return false ;
}
img = $ ( "img[usemap=#" + mapName + "]" ) [ 0 ] ;
return ! ! img && visible ( img ) ;
}
return ( / input| select| textarea| button| object/ . test ( nodeName )
? ! element . disabled
: "a" == nodeName
? element . href || ! isNaN ( tabIndex )
: ! isNaN ( tabIndex ) )
// the element and all of its ancestors must be visible
&& visible ( element ) ;
return focusable ( element , ! isNaN ( $ . attr ( element , "tabindex" ) ) ) ;
} ,
tabbable : function ( element ) {
var tabIndex = $ . attr ( element , "tabindex" ) ;
return ( isNaN ( tabIndex ) || tabIndex >= 0 ) && $ ( element ) . is ( ":focusable" ) ;
var tabIndex = $ . attr ( element , "tabindex" ) ,
isTabIndexNaN = isNaN ( tabIndex ) ;
return ( isTabIndexNaN || tabIndex >= 0 ) && focusable ( element , ! isTabIndexNaN ) ;
}
} ) ;