我有许多具有不同z-index的div元素。我想在这些div中找到最高的z-index - 我怎样才能实现它?
CSS:
#layer-1 { z-index: 1 }
#layer-2 { z-index: 2 }
#layer-3 { z-index: 3 }
#layer-4 { z-index: 4 }
HTML:
<div id="layer-1">layer-1</div>
<div id="layer-2">layer-2</div>
<div id="layer-3">layer-3</div>
<div id="layer-4">layer-4</div>
我不认为这条线可以找到最高的z指数。
var index_highest = parseInt($("div").css("zIndex"));
// returns 10000
答案 0 :(得分:35)
请注意,z-index仅影响定位元素。因此,具有position: static
的任何元素都不会具有z-index,即使您为其指定了值也是如此。在Google Chrome等浏览器中尤其如此。
var index_highest = 0;
// more effective to have a class for the div you want to search and
// pass that to your selector
$("#layer-1,#layer-2,#layer-3,#layer-4").each(function() {
// always use a radix when using parseInt
var index_current = parseInt($(this).css("zIndex"), 10);
if(index_current > index_highest) {
index_highest = index_current;
}
});
一般的jQuery选择器,当与返回一个值的选项一起使用时,只返回第一个所以你的结果只是jQuery抓取的第一个div的z-index。要仅获取所需的div,请在其上使用类。如果你想要所有的div,请坚持使用div
。
答案 1 :(得分:13)
这是一个非常简洁的方法:
var getMaxZ = function(selector){
return Math.max.apply(null, $(selector).map(function(){
var z;
return isNaN(z = parseInt($(this).css("z-index"), 10)) ? 0 : z;
}));
};
用法:
getMaxZ($("#layer-1,#layer-2,#layer-3,#layer-4"));
或者,作为jQuery扩展:
jQuery.fn.extend({
getMaxZ : function(){
return Math.max.apply(null, jQuery(this).map(function(){
var z;
return isNaN(z = parseInt(jQuery(this).css("z-index"), 10)) ? 0 : z;
}));
}
});
用法:
$("#layer-1,#layer-2,#layer-3,#layer-4").getMaxZ();
答案 2 :(得分:11)
除了@ justkt上面的原生解决方案,还有一个很好的插件可以做你想要的。 看看TopZIndex。
$.topZIndex("div");
答案 3 :(得分:5)
试试这个:
var index_highest = 0;
$('div').each(function(){
var index_current = parseInt($(this).css("z-index"), 10);
if(index_current > index_highest) {
index_highest = index_current;
}
});
答案 4 :(得分:2)
我不知道这有多高效,但您可以使用$.map
获取所有z-index:
var $divs = $('div'),
mapper = function (elem) {
return parseFloat($(elem).css('zIndex'));
},
indices = $.map($divs, mapper);
indices
变量现在是所有div的所有z-index的数组。您现在需要做的就是apply
他们到Math.max
:
var highest = Math.max.apply(whatevs, indices);
答案 5 :(得分:2)
这样就可以了:
$(document).ready(function() {
var array = [];
$("div").each(function() {
array.push($(this).css("z-index"));
});
var index_highest = Math.max.apply(Math, array);
alert(index_highest);
});
尝试this
答案 6 :(得分:2)
这是直接从jquery-ui获取的,它的效果非常好:
(function ($) {
$.fn.zIndex = function (zIndex) {
if (zIndex !== undefined) {
return this.css("zIndex", 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"), 10);
if (!isNaN(value) && value !== 0) {
return value;
}
}
elem = elem.parent();
}
}
return 0;
}
})(jQuery);
答案 7 :(得分:1)
这里我是如何得到最低/最高的z索引。如果你只想获得最高的z-index而不是更多,那么这个函数可能效率不高,但是如果你想获得所有z-index和与之相关的id(即用于将'layer'带到前面/这是一种方法。发送回来,提前,发送,等等。该函数返回一个包含id及其z索引的对象数组。
function getZindex (id) {
var _l = [];
$(id).each(function (e) {
// skip if z-index isn't set
if ( $(this).css('z-index') == 'auto' ) {
return true
}
_l.push({ id: $(this), zindex: $(this).css('z-index') });
});
_l.sort(function(a, b) { return a.zindex - b.zindex });
return _l;
}
// You'll need to add a class 'layer' to each of your layer
var _zindexes = getZindex('.layer');
var _length = _zindexes.length;
// Highest z-index is simply the last element in the array
var _highest = _zindexes[_length - 1].zindex
// Lowest z-index is simply the first element in the array
var _lowest = _zindex[0].zindex;
alert(_highest);
alert(_lowest);
答案 8 :(得分:0)
Vanilla JS,不是100%跨浏览器。包括作为未来读者/替代方法的参考。
function getHighIndex (selector) {
// No granularity by default; look at everything
if (!selector) { selector = '*' };
var elements = document.querySelectorAll(selector) ||
oXmlDom.documentElement.selectNodes(selector),
i = 0,
e, s,
max = elements.length,
found = [];
for (; i < max; i += 1) {
e = window.getComputedStyle(elements[i], null).zIndex || elements[i].currentStyle.zIndex;
s = window.getComputedStyle(elements[i], null).position || elements[i].currentStyle.position;
// Statically positioned elements are not affected by zIndex
if (e && s !== "static") {
found.push(parseInt(e, 10));
}
}
return found.length ? Math.max.apply(null, found) : 0;
}
答案 9 :(得分:0)
试试我的小提琴:
http://planitize.tumblr.com/post/23541747264/get-highest-z-index-with-descendants-included
这结合了我在其他地方没有看到的三个优点:
一个缺点:没有跨浏览器保证。
答案 10 :(得分:-1)
如果你正在做我认为你正在做的事情,那就没有必要了。就这样做:
$('div[id^=layer-]').css('z-index', 0);
$(this).css('z-index', 1000);