如果没有前任匹配类,则jQuery选择

时间:2013-07-31 16:41:31

标签: jquery css sharepoint

在我的Sharepoint门户网站中,我正在尝试修复列表比页面边框(自定义母版页)更宽的问题,并且当它们显示在最右侧时看起来很有趣。所以我正在编写一个jQuery函数来重置宽度。

我的功能很好,很好,它也适用于Sharepoint对话 - 但我不希望它在对话中工作!

这是我选择元素的方法。

var elements = $(".s4-wpcell-plain > div > *, #pagebody.s4-ca > div > *");

但是,如果页面在对话框中运行,我想排除匹配。现在,有一个.ms-dlgContent样式,但它在我的选择器匹配中使用的任何元素都在上面(比如,父母的父亲等等......)。

如果没有匹配该类的前任,我如何匹配我的元素?

[更新]

嗯,谢谢你,忠实的jQuery大师们如此快速的回应。但是我尝试了你所有的技巧,并没有完全解决这个问题,所以让我解释一下(对不起,我之前没想过这个)。

以下是对话中#pagebody div的css路径。您可以在开始时看到指定对话框的类。

  

html.ms-dialog body form #aspnetForm div#s4-workspace.s4-nosetwidth   div#s4-bodyContainer div#ctl00_MSO_ContentDiv div#pagebody.s4-ca

这是常规页面的#pagebody元素的css路径。

  

html正文形式#aspnetForm div#s4-workspace.s4-nosetwidth   div#s4-bodyContainer div#ctl00_MSO_ContentDiv div#pagebody.s4-ca

所以,我需要影响主页的#pagebody,而不是对话。请记住,我希望避免根据Sharepoint生成的GUID选择任何内容。

[编辑]

呃,对不起,在看完这些路径之后,现在我意识到我必须使用ms-dialog而不是ms-dlgContent。我现在就给你答案。

3 个答案:

答案 0 :(得分:2)

试试这个:

var elements = $(".s4-wpcell-plain > div > *, #pagebody.s4-ca > div > *");

var elementsNotInDialoge = elements.filter(function() {
    return !$(this).parents('.ms-dlgContent').length;
});

答案 1 :(得分:1)

您可以使用filter

var elements = $(".s4-wpcell-plain > div > *, #pagebody.s4-ca > div > *")
    .filter(function() {
        return $(this).closest('.ms-dlgContent').length == 0;       
    }

答案 2 :(得分:1)

试试这个(我假设您的.ms-dlgContent是div):

var elements = $("div:not(.ms-dlgContent) .s4-wpcell-plain > div > *, #pagebody.s4-ca > div > *");