2013-07-31 78 views
2

在我的Sharepoint門戶網站,我試圖解決一個問題,其中列表比頁面邊框(自定義母版頁)更寬,並且當它們顯示在最右側時看起來很有趣。所以我正在寫一個將重置寬度的jQuery函數。jQuery的選擇,如果沒有任何前輩匹配類

我的功能很好,很好,它也適用於Sharepoint對話框 - 但我不希望它在對話框中工作!

這裏是我選擇工作的元素的方法。

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

但是,如果頁面在對話框中運行,我想排除匹配。現在,有一個.ms-dlgContent樣式,但它是上面的方式(比如,父級父代的父代等...)我在選擇器匹配中使用的任何元素。

如果沒有與該類匹配的前驅,我該如何匹配我的元素?

[更新]

嗯,謝謝你,忠實的jQuery大師這樣的快速反應。但是我嘗試了所有的技巧,但它並沒有完全實現,所以讓我多解釋一下(對不起,我之前沒有想到這一點)。

以下是對話框中#pagebody div的css路徑。您可以在開始時看到指定對話框的類。

html.ms-對話框體形式#aspnetForm DIV#S4-workspace.s4-nosetwidth DIV#S4-bodyContainer DIV#ctl00_MSO_ContentDiv DIV#pagebody.s4-CA

這是CSS常規頁面的#pagebody元素的路徑。

HTML體形式#DIV aspnetForm#S4-workspace.s4-nosetwidth DIV#S4-bodyContainer DIV#DIV ctl00_MSO_ContentDiv#pagebody.s4-CA

所以,我需要影響#pagebody只是主頁而不是對話。請記住,我想避免選擇任何基於Sharepoint生成的GUID。

[編輯]

呃,對不起,看着那些路徑之後,現在我意識到我必須使用ms-dialog代替OT ms-dlgContent。我現在要標記答案。

+0

這個問題應該被標記爲CSS也是。 –

回答

2

試試這個:

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

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

你可以使用filter

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

試試這個(我假設你.ms-dlgContent是一個div):

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