Fix :visible does not work properly when display:none is set directly on an element in IE8. Fixes #4512.
This commit is contained in:
parent
57c046f91c
commit
0229b83f7e
|
@ -280,14 +280,9 @@ function getWH( elem, name, extra ) {
|
||||||
|
|
||||||
if ( jQuery.expr && jQuery.expr.filters ) {
|
if ( jQuery.expr && jQuery.expr.filters ) {
|
||||||
jQuery.expr.filters.hidden = function( elem ) {
|
jQuery.expr.filters.hidden = function( elem ) {
|
||||||
var width = elem.offsetWidth, height = elem.offsetHeight,
|
var width = elem.offsetWidth, height = elem.offsetHeight;
|
||||||
skip = elem.nodeName.toLowerCase() === "tr";
|
|
||||||
|
|
||||||
return width === 0 && height === 0 && !skip ?
|
return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
|
||||||
true :
|
|
||||||
width > 0 && height > 0 && !skip ?
|
|
||||||
false :
|
|
||||||
(elem.style.display || jQuery.css( elem, "display" )) === "none";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
jQuery.expr.filters.visible = function( elem ) {
|
jQuery.expr.filters.visible = function( elem ) {
|
||||||
|
|
|
@ -65,7 +65,8 @@
|
||||||
checkClone: false,
|
checkClone: false,
|
||||||
scriptEval: false,
|
scriptEval: false,
|
||||||
noCloneEvent: true,
|
noCloneEvent: true,
|
||||||
boxModel: null
|
boxModel: null,
|
||||||
|
reliableHiddenOffsets: true
|
||||||
};
|
};
|
||||||
|
|
||||||
// Make sure that the options inside disabled selects aren't marked as disabled
|
// Make sure that the options inside disabled selects aren't marked as disabled
|
||||||
|
@ -117,6 +118,18 @@
|
||||||
|
|
||||||
document.body.appendChild( div );
|
document.body.appendChild( div );
|
||||||
jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
|
jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
|
||||||
|
|
||||||
|
// Check if table cells still have offsetWidth/Height when they are set
|
||||||
|
// to display:none and there are still other visible table cells in a
|
||||||
|
// table row; if so, offsetWidth/Height are not reliable for use when
|
||||||
|
// determining if an element has been hidden directly using
|
||||||
|
// display:none (it is still safe to use offsets if a parent element is
|
||||||
|
// hidden; don safety goggles and see bug #4512 for more information).
|
||||||
|
// (only IE 8 fails this test)
|
||||||
|
div.innerHTML = '<table><tr><td style="display:none"></td><td>t</td></tr></table>';
|
||||||
|
jQuery.support.reliableHiddenOffsets = div.getElementsByTagName('td')[0].offsetHeight === 0;
|
||||||
|
div.innerHTML = '';
|
||||||
|
|
||||||
document.body.removeChild( div ).style.display = 'none';
|
document.body.removeChild( div ).style.display = 'none';
|
||||||
div = null;
|
div = null;
|
||||||
});
|
});
|
||||||
|
|
|
@ -256,3 +256,16 @@ test("jQuery.css(elem, 'height') doesn't clear radio buttons (bug #1095)", funct
|
||||||
ok( !! jQuery(":checkbox:first", $checkedtest).attr("checked"), "Check first checkbox still checked." );
|
ok( !! jQuery(":checkbox:first", $checkedtest).attr("checked"), "Check first checkbox still checked." );
|
||||||
ok( ! jQuery(":checkbox:last", $checkedtest).attr("checked"), "Check last checkbox still NOT checked." );
|
ok( ! jQuery(":checkbox:last", $checkedtest).attr("checked"), "Check last checkbox still NOT checked." );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test(":visible selector works properly on table elements (bug #4512)", function () {
|
||||||
|
expect(1);
|
||||||
|
|
||||||
|
jQuery('#table').html('<tr><td style="display:none">cell</td><td>cell</td></tr>');
|
||||||
|
equals(jQuery('#table td:visible').length, 1, "hidden cell is not perceived as visible");
|
||||||
|
});
|
||||||
|
|
||||||
|
test(":visible selector works properly on children with a hidden parent (bug #4512)", function () {
|
||||||
|
expect(1);
|
||||||
|
jQuery('#table').css('display', 'none').html('<tr><td>cell</td><td>cell</td></tr>');
|
||||||
|
equals(jQuery('#table td:visible').length, 0, "hidden cell children not perceived as visible");
|
||||||
|
});
|
Loading…
Reference in a new issue