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 に答える