如何使用jQueryfind最高的z-index
我有一些不同的Z指数div元素。 我想在这些div中find最高的z-索引 – 我该如何实现呢?
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>
我不认为这条线可以find最高的Z指数。
var index_highest = parseInt($("div").css("zIndex")); // returns 10000
请注意,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; } });
JSFiddle演示
一个像这样的普通jQueryselect器,当与一个返回一个值的选项一起使用时,只会返回第一个。因此,您的结果只是jQuery抓取的第一个div的z-index。 要只抓住你想要的div,使用他们的类。 如果你想要所有的div,坚持div
。
这是一个非常简洁的方法:
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();
除了上面的justkt原生解决scheme,还有一个很好的插件可以做你想做的事情。 看看TopZIndex 。
$.topZIndex("div");
尝试这个 :
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; } });
我不知道这是多高效,但是可以使用$.map
来获得所有的z-index:
var $divs = $('div'), mapper = function (elem) { return parseFloat($(elem).css('zIndex')); }, indices = $.map($divs, mapper);
indices
variables现在是所有div的所有z-index的数组。 你现在要做的就是apply
它们apply
到Math.max
:
var highest = Math.max.apply(whatevs, indices);
这将做到这一点:
$(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); });
试试这个
在这里,我是如何得到最低/最高的z-索引。 如果你只想获得最高的z-index,那么这个函数可能效率不高,但是如果你想得到所有的z-索引和与之相关的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);
这是从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);
香草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; }
试试我的小提琴:
http://planitize.tumblr.com/post/23541747264/get-highest-z-index-with-descendants-included
这结合了我在其他地方没有见过的三个优点:
- 获取显式定义的最高z-索引(默认值)或最高的计算值。
- 将查看您的select器的所有后代,如果没有提供任何文档的所有后代。
- 将返回最高z的值,或者返回z最高的元素。
一个缺点:没有跨浏览器的保证。
如果你正在做我认为你正在做的事,那就没有必要。 只要这样做:
$('div[id^=layer-]').css('z-index', 0); $(this).css('z-index', 1000);