2017-02-08 8 views
-1

ドキュメント名(例:my_doc.pdf)を取得するSharePoint Script Editor WebpartにjQueryコードを追加してフルパスを作成しました次のセルにあるテキストの周りに<a>タグをラップします。これはページの読み込みには完全に機能しますが、リストのソートやフィルタリングではDOMの変更はすべて消えます。SharePointリストの並べ替え/フィルタ処理後にjQuery DOMの変更が消える

_spBodyOnLoadFunctionNames.push("myDocURL"); 
function myDocURL() { 
    $('.ms-listlink').each(function(){ 
    var myDocName = $(this).attr('href'), 
     myDocNameHref = 'https://www.example.com' + myDocName; 
     myDocLink = '<a href="' + myDocNameHref + '" target="_blank">', 
     nextTD = $(this).closest("td").next(); 
    $(nextTD).wrapInner(myDocLink + '</a>'); 
}); 
} 

事前にどうもありがとう:ここでのコードは、(私は_spBodyOnLoadFunctionNames.push$(document).readyを置き換え)です。

+0

あなたの代わりにビルトインを使用するスクリプトエディタWebパーツを使用することを選択したすべての理由[ JSLink /クライアントサイドレンダリング](https://code.msdn.microsoft.com/office/Client-side-rendering-JS-2ed3538a)機能 – Thriggle

+0

コメントありがとうございます。 JS Linkオプションを試しましたが、うまくいかず、DOMへのチャンクが発生しませんでした。 – clnns45

+0

質問を編集して、試したコードを含めることができますか?たぶんあなたのアプローチには微妙な問題があります。 – Thriggle

答えて

0

テキストが長すぎてコメントできませんでしたので、ここで説明します。

ここではJSLinkの例を持つ良い記事です。https://code.msdn.microsoft.com/office/Client-side-rendering-code-0a786cdd 非常に簡単で簡単です - スクリプトエディタやその他の奇妙なものは必要ありません。 "MyURL"フィールドレンダリングを変更したいとします。

// myrendering.js 
(function() { 

    var ctx = {}; 
    ctx.Templates = {}; 
    ctx.Templates.Fields = { // you can override many things, but in this case we are going for the Fields 
     // Apply the new rendering for MyURL field on List View 
     // But you can add as many fields as you like 
     "MyURL": { "View": myUrlFieldTemplate } 
    }; 

    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctx); 

})(); 
// This function provides the rendering logic for list view 
// Instead of default SharePoint url field you will get whatever you return from this function 
function myUrlFieldTemplate(ctx) { 
    // put debugger here to see whats going on - it will help you alot 
    var myUrl = ctx.CurrentItem[ctx.CurrentFieldSchema.Name]; // get field value 
    return "<a target='_blank' href='" + myUrl + "'>Im JSLink rendered field!</a>"; 
    // or you can return whatever you want, for example 
    // return "<button>Im button now!</button>"; 
    // and your field "MyURL" will become a button in a list view 
} 
//end 
+0

ありがとう@AlexK – clnns45

0

どうやら変更を保持するための1つの方法は、すべてのhashchange後に関数を呼び出すことである:

window.addEventListener("hashchange", myFunction, false); 
関連する問題