2

在我的 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 body form#aspnetForm div#s4-workspace.s4-nosetwidth div#s4-bodyContainer div#ctl00_MSO_ContentDiv div#pagebody.s4-ca

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

[编辑]

呃,对不起,看了那些路径之后,现在我意识到我必须ms-dialog改用 ot ms-dlgContent。我现在标记答案。

4

3 回答 3

2

尝试这个:

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

var elementsNotInDialoge = elements.filter(function() {
    return !$(this).parents('.ms-dlgContent').length;
});
于 2013-07-31T16:44:07.377 回答
1

你可以使用filter

var elements = $(".s4-wpcell-plain > div > *, #pagebody.s4-ca > div > *")
    .filter(function() {
        return $(this).closest('.ms-dlgContent').length == 0;       
    }
于 2013-07-31T16:44:43.527 回答
1

试试这个(我假设你.ms-dlgContent是一个 div):

var elements = $("div:not(.ms-dlgContent) .s4-wpcell-plain > div > *, #pagebody.s4-ca > div > *");
于 2013-07-31T16:45:41.167 回答