summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrant Burnett <btburnett3@gmail.com>2010-01-29 18:38:21 +0000
committerBrant Burnett <btburnett3@gmail.com>2010-01-29 18:38:21 +0000
commitb91ecde0a7d60185d47493c455e9fec3666d483a (patch)
treea43f28e80e20a214b21ae62aa6af79fbb73cb07c
parentf214b708894ef2a1607050977f9698cf0d916d43 (diff)
downloadjquery-ui-b91ecde0a7d60185d47493c455e9fec3666d483a.tar.gz
jquery-ui-b91ecde0a7d60185d47493c455e9fec3666d483a.zip
'Changed
-rw-r--r--tests/unit/core/core.html13
-rw-r--r--tests/unit/core/core.js13
-rw-r--r--ui/jquery.ui.core.js30
3 files changed, 43 insertions, 13 deletions
diff --git a/tests/unit/core/core.html b/tests/unit/core/core.html
index 0b2235a99..1e6f49d33 100644
--- a/tests/unit/core/core.html
+++ b/tests/unit/core/core.html
@@ -14,6 +14,11 @@
<script type="text/javascript" src="core.js"></script>
<script type="text/javascript" src="selector.js"></script>
+
+ <style type="text/css">
+ .zindex {z-index: 100}
+ .absolute {position: absolute}
+ </style>
</head>
<body>
@@ -95,9 +100,15 @@
<div id="aria"></div>
- <div id="zIndex100" style="z-index: 100;">
+ <div id="zIndex100" style="z-index: 100; position: absolute">
<div id="zIndexAutoWithParent"></div>
</div>
+ <div id="zIndex100ViaCSS" class="zindex">
+ <div id="zIndexAutoWithParentViaCSS"></div>
+ </div>
+ <div id="zIndex100ViaCSSPositioned" class="zindex absolute">
+ <div id="zIndexAutoWithParentViaCSSPositioned"></div>
+ </div>
<div id="zIndexAutoNoParent"></div>
</div>
diff --git a/tests/unit/core/core.js b/tests/unit/core/core.js
index 23292671a..c94241f19 100644
--- a/tests/unit/core/core.js
+++ b/tests/unit/core/core.js
@@ -49,11 +49,20 @@ test('focus', function() {
});
test('zIndex', function() {
- var el = $('#zIndexAutoWithParent');
+ var el = $('#zIndexAutoWithParent'),
+ parent = el.parent();
equals(el.zIndex(), 100, 'zIndex traverses up to find value');
- equals(el.zIndex(200), el, 'zIndex setter is chainable');
+ equals(parent.zIndex(200), parent, 'zIndex setter is chainable');
equals(el.zIndex(), 200, 'zIndex setter changed zIndex');
+ el = $('#zIndexAutoWithParentViaCSS');
+ equals(el.zIndex(), 0, 'zIndex traverses up to find CSS value, not found because not positioned');
+
+ el = $('#zIndexAutoWithParentViaCSSPositioned');
+ equals(el.zIndex(), 100, 'zIndex traverses up to find CSS value');
+ el.parent().zIndex(200);
+ equals(el.zIndex(), 200, 'zIndex setter changed zIndex, overriding CSS');
+
equals($('#zIndexAutoNoParent').zIndex(), 0, 'zIndex never explicitly set in hierarchy');
});
diff --git a/ui/jquery.ui.core.js b/ui/jquery.ui.core.js
index 934210348..2f238a01c 100644
--- a/ui/jquery.ui.core.js
+++ b/ui/jquery.ui.core.js
@@ -149,17 +149,27 @@ $.fn.extend({
if (zIndex !== undefined) {
return this.css('zIndex', zIndex);
}
-
- var elem = this[0];
- while (elem && elem.style) {
- // IE returns 0 when zIndex is not specified
- // other browsers return an empty string
- // we ignore the case of nested elements with an explicit value of 0
- // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
- if (elem.style.zIndex !== '' && elem.style.zIndex !== 0) {
- return +elem.style.zIndex;
+
+ if (this.length) {
+ var elem = $(this[0]), position, value;
+ while (elem.length && elem[0] !== document) {
+ // Ignore z-index if position is set to a value where z-index is ignored by the browser
+ // This makes behavior of this function consistent across browsers
+ // WebKit always returns auto if the element is positioned
+ position = elem.css('position');
+ if (position == 'absolute' || position == 'relative' || position == 'fixed')
+ {
+ // IE returns 0 when zIndex is not specified
+ // other browsers return a string
+ // we ignore the case of nested elements with an explicit value of 0
+ // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+ value = parseInt(elem.css('zIndex'));
+ if (!isNaN(value) && value != 0) {
+ return value;
+ }
+ }
+ elem = elem.parent();
}
- elem = elem.parentNode;
}
return 0;