如何订购jQuery包装集?

时间:2010-11-29 00:05:20

标签: jquery

我需要能够在包装集中获得最顶层的“.ui-dialog”元素。

我的第一个想法是做这样的事情:

var topDialog = $(".ui-dialog").orderBy("[style*=z-index]").eq(0);

有没有比编写循环检查值更好的方法呢?

编辑:只是为了澄清......我需要能够在页面生命周期的任何给定点获取最顶层的元素(打开和关闭多个对话框后)。 Nick Craver使用maxZ变量的答案似乎不起作用,因为删除对话框时变量不会减少。

这是我现在正在使用的循环,当我关闭一个对我来说有点难看的对话框时:

// Enable printing of the top-most dialog or #page
if ($(".ui-dialog").length > 0) {

    var top = $(".ui-dialog").first();

    $(".ui-dialog").each(function () {
        if ($(this).css("z-index") > top.css("z-index")) {
            top = $(this);
        }
    });

    top.removeClass("dont-print");

} else {

    $("#page").removeClass("dont-print");

}

3 个答案:

答案 0 :(得分:5)

由于对话框是堆叠的,因此顶部z-index的变量实际上是维护和可访问的,它是:$.ui.dialog.maxZyou can see how it's set here

因此,您可以看到哪个对话框具有最高索引(只有一个),而不是排序,如下所示:

var topDialog = $(".ui-dialog").filter(function() { 
                  return $(this).css("z-index") == $.ui.dialog.maxZ;
                });

You can test it out here

答案 1 :(得分:2)

您也可以随时制作自定义选择器:)

jQuery.expr[':'].highestModal = function(node) {
    return $(node).css('z-index') == $.ui.dialog.maxZ;
};

Nick Craver's answer(我希望他不介意:P有一个upvote!)

像这样使用......

$('.ui-dialog:highestModal');

答案 2 :(得分:0)

    function clearUiMaxZ() {
        setTimeout(function() {
            $.ui.dialog.overlay.maxZ = 0;
            $.ui.dialog.maxZ = 0;
        }, 100);
    }

在对话框关闭时调用此功能,这将重置maxZ。