jQuery.fn.load呼び出し時にurlにselectorを付けてスクリプトを実行する方法
jQueryを呼び出すfn.loadではurlの後ろにセレクタを付けてロードされたコンテンツを指定できます.ドキュメントには次のように記述されています.
デフォルトではGET方式-追加パラメータを渡すと自動的にPOST方式に変換されます.jQuery 1.2では、読み込まれたHTMLドキュメントをフィルタするためのセレクタを指定でき、DOMではフィルタされたHTMLコードのみが挿入されます.「url#some>selector」などの構文.例を参照してください.
ただし、セレクタが指定されているとページ内のスクリプトが実行されないという問題があり、jQueryのコードを見てみると、セレクタがあったときに、すべてのスクリプトをフィルタリングしていたことがわかります
jQuery 1.8.3ソースコードの2つのセグメント:
しかし、jQueryがスクリプトをフィルタリングするのは理にかなっている以上......htmlのcssやscriptの一部が呼び出したくない可能性があるので、どうすればいいのでしょうか.jQueryでscriptをフィルタリングするのと似たような方法で、すべてのscriptを探し出して、実行する必要があるものを選んで実行します.
すると、scriptに属性loadinvoke=「true」を追加すると、コンテンツがロードされた後に実行されることが約束されています.
ロードされたスクリプトに材料を追加するには、次の手順に従います.
れんがを投げて玉を引く
デフォルトではGET方式-追加パラメータを渡すと自動的にPOST方式に変換されます.jQuery 1.2では、読み込まれたHTMLドキュメントをフィルタするためのセレクタを指定でき、DOMではフィルタされたHTMLコードのみが挿入されます.「url#some>selector」などの構文.例を参照してください.
- $("#links").load("/Main_Page #p-Getting-Started li");
ただし、セレクタが指定されているとページ内のスクリプトが実行されないという問題があり、jQueryのコードを見てみると、セレクタがあったときに、すべてのスクリプトをフィルタリングしていたことがわかります
jQuery 1.8.3ソースコードの2つのセグメント:
- rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, //
- // See if a selector was specified
- self.html( selector ?
-
- // Create a dummy div to hold the results
- jQuery("<div>")
-
- // inject the contents of the document in, removing the scripts
- // to avoid any 'Permission Denied' errors in IE
- .append( responseText.replace( rscript, "" ) )
-
- // Locate the specified elements
- .find( selector ) :
-
- // If not, just inject the full result
- responseText );
では、ページ内のスクリプトを実行するには、ページ内容のスクリプトを見つけてもう一度実行するだけです.loadのcallbackでは、ページ全体を取り出すことができるので、一言で解決できます.
- $("#place_holder").load("Page.html #content", function(html) {
- // html , css script
- // DIV ( , remove)
- $("<div>").html(html).remove();
- });
しかし、jQueryがスクリプトをフィルタリングするのは理にかなっている以上......htmlのcssやscriptの一部が呼び出したくない可能性があるので、どうすればいいのでしょうか.jQueryでscriptをフィルタリングするのと似たような方法で、すべてのscriptを探し出して、実行する必要があるものを選んで実行します.
すると、scriptに属性loadinvoke=「true」を追加すると、コンテンツがロードされた後に実行されることが約束されています.
- <script type="text/javascript">
- console.log(" jQuery.fn.load ")
- </script>
-
- <script type="text/javascript" loadinvoke="loadinvoke">
- console.log(" jQuery.fn.load ")
- </script>
ロードされたスクリプトに材料を追加するには、次の手順に従います.
- rscript = /<script\b[^>]*\b loadinvoke \b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;
-
- $("#place_holder").load("Page.html #content", function(html) {
- //
- var m = html.match(rscript);
- for (var i = 0; i < m.length; i++) {
- // div
- $("<div>").html(m[i]).remove();
- }
- });
れんがを投げて玉を引く