2

私は重大な問題に直面しています。2 つの部分があるページがあります。ページの最初の部分では、html が ajax リクエストによってレンダリングされます。2 番目のページでは、ページの読み込み時に html がレンダリングされます。ページの最初の部分は、異なるページネーション スクリプトを使用して個別に処理されます。ページネーションも、同じ URL に ajax リクエストを送信することで処理されます。

パート1に問題があります。パート 1 の html を生成するスクリプトも、javascript を使用して多数の javascript タグと html を生成しています。そのhtmlに新しいスクリプトタグを挿入するときに私がやっていることは次のようなものです:

var script   = document.createElement("script");
script.type  = "text/javascript";
script.text  = "window.twttr = (function (d,s,id) {var t, js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) return; js=d.createElement(s); js.id=id;js.src=\"//platform.twitter.com/widgets.js\"; fjs.parentNode.insertBefore(js, fjs);return window.twttr || (t = { _e: [], ready: function(f){ t._e.push(f) } });}(document, \"script\", \"twitter-wjs\"));(function(d, s, id) {var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return;js = d.createElement(s); js.id = id; js.src = \"//connect.facebook.net/en_GB/all.js#xfbml=1\"; fjs.parentNode.insertBefore(js, fjs);}(document, \"script\", \"facebook-jssdk\"));var script_generated=1";               // use this for inline script
document.body.appendChild(script);

実際、ページの最初の部分の各項目に Facebook のようなボタンと Twitter ボタンを表示するのは、Twitter と Facebook の接続ステートメントです。ページが初めてロードされると、script タグが正常に生成されます。しかし、ページネーションをクリックすると、新しいページの html を持つ新しい ajax リクエストが送信され、同じスクリプト タグが再度生成されます。したがって、2 番目のページには、私の Twitter ボタンと Facebook の「いいね」ボタンが表示されていません。

Facebook と Twitter の二重接続ステートメントによるものだと思いました。次に、変数を生成し、スクリプト タグの生成中に値を設定します。そして、リクエストごとに、その変数が存在するかどうかを確認します。存在する場合、次のような特定のスクリプト タグは生成しません。

if(typeof script_generated === "undefined") {
  var script   = document.createElement("script");
  script.type  = "text/javascript";
  script.text  = "window.twttr = (function (d,s,id) {var t, js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) return; js=d.createElement(s); js.id=id;js.src=\"//platform.twitter.com/widgets.js\"; fjs.parentNode.insertBefore(js, fjs);return window.twttr || (t = { _e: [], ready: function(f){ t._e.push(f) } });}(document, \"script\", \"twitter-wjs\"));(function(d, s, id) {var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return;js = d.createElement(s); js.id = id; js.src = \"//connect.facebook.net/en_GB/all.js#xfbml=1\"; fjs.parentNode.insertBefore(js, fjs);}(document, \"script\", \"facebook-jssdk\"));var script_generated=1";
           // use this for inline script
  document.body.appendChild(script);
} 

このスクリプト タグを実行しても再生成されませんが、ツイートや Facebook の「いいね」ボタンは表示されません。

スクリプトタグがajaxリクエストによって生成されるため、スクリプトタグが見つからないため、ボタンが適切に表示されないと解釈しました(間違っている可能性があります)。

ここで私が望むのは、リクエストがそのファイルに送信されるたびに、まずその特定のスクリプト タグが存在するかどうかを確認し、存在する場合は削除して新しいタグを生成し、そうでない場合は生成することです。これを行う方法を教えてください。

問題を間違って解釈した場合は、正確な問題と、これを克服する方法を教えてください。

4

2 に答える 2

4

動的に追加するときに、スクリプトタグに id を与えることができます。

var script   = document.createElement("script");
script.setAttribute('id', 'addedScript');
script.type  = "text/javascript";
script.text  = "window.twttr = (function (d,s,id) {var t, js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) return; js=d.createElement(s); js.id=id;js.src=\"//platform.twitter.com/widgets.js\"; fjs.parentNode.insertBefore(js, fjs);return window.twttr || (t = { _e: [], ready: function(f){ t._e.push(f) } });}(document, \"script\", \"twitter-wjs\"));(function(d, s, id) {var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return;js = d.createElement(s); js.id = id; js.src = \"//connect.facebook.net/en_GB/all.js#xfbml=1\"; fjs.parentNode.insertBefore(js, fjs);}(document, \"script\", \"facebook-jssdk\"));var script_generated=1";
// use this for inline script
document.body.appendChild(script);

その後、これを使用して script タグが存在するかどうかを確認し、.remove() クエリ関数を使用して削除できます。

if(addedScript != undefined) {
  $("#addedScript").remove();
} 
于 2012-05-22T10:36:18.720 に答える
0

こんにちは、そのスクリプト タグの参照オブジェクトを取得できます。オブジェクトを使用して、参照されている src ファイルを変更できます。

こんなはずなのに、

var $jsRef = $('<script type="text/javascript" >').appendTo(document.body);
$jsRef.attr("src","jsFileName.js");

// You can also add content like this
$jsRef.append(content);


// You can change the js file name or content the same way
$jsRef.attr("src","newJSFileName.js");

// Changing the content like this
$jsRef.empty();
$jsRef.append(content);

または、オブジェクトでアクセスする代わりに、script タグの ID を設定し、ID に基づいてコンテンツを変更することもできます。

于 2012-05-22T10:35:22.213 に答える