mirror of
https://github.com/jquery/jquery-ui.git
synced 2024-11-21 11:04:24 +00:00
Core: reuse tabindex value. Fixed #7257 - optimize :tabbable.
This commit is contained in:
parent
5058ac3ce7
commit
fe3b36b8ef
46
ui/jquery.ui.core.js
vendored
46
ui/jquery.ui.core.js
vendored
@ -174,6 +174,27 @@ $.each( [ "Width", "Height" ], function( i, name ) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// selectors
|
// 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 ) {
|
function visible( element ) {
|
||||||
return !$( element ).parents().andSelf().filter(function() {
|
return !$( element ).parents().andSelf().filter(function() {
|
||||||
return $.curCSS( this, "visibility" ) === "hidden" ||
|
return $.curCSS( this, "visibility" ) === "hidden" ||
|
||||||
@ -187,30 +208,13 @@ $.extend( $.expr[ ":" ], {
|
|||||||
},
|
},
|
||||||
|
|
||||||
focusable: function( element ) {
|
focusable: function( element ) {
|
||||||
var nodeName = element.nodeName.toLowerCase(),
|
return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
|
||||||
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 );
|
|
||||||
},
|
},
|
||||||
|
|
||||||
tabbable: function( element ) {
|
tabbable: function( element ) {
|
||||||
var tabIndex = $.attr( element, "tabindex" );
|
var tabIndex = $.attr( element, "tabindex" ),
|
||||||
return ( isNaN( tabIndex ) || tabIndex >= 0 ) && $( element ).is( ":focusable" );
|
isTabIndexNaN = isNaN( tabIndex );
|
||||||
|
return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user