18

この質問は、私が求めているものに非常によく似ています:ツイート ボタンの属性を Jquery に置き換えます

ただし、提案された解決策は一度しか機能しません。つまり、次のようなswitchステートメントでは使用できません。

    switch(element.id)
    {
        case "t1":
            $(document).ready(function(){
                $('a[data-text]').each(function(){
                    $(this).attr('data-text', Text_Variant_1);
                });
                $.getScript('http://platform.twitter.com/widgets.js');
            });
            break;
        case "t2":
            $(document).ready(function(){
                $('a[data-text]').each(function(){
                    $(this).attr('data-text', Text_Variant_2);
                });
                $.getScript('http://platform.twitter.com/widgets.js');
            });
        ...
    }

何が起こるかというと、data-text属性は、最初に発生したケースに応じて設定され、その後は変更されません。

ツイートボタンのdata-text属性を何度でも変更するにはどうすればよいですか?

更新:ここに私が取り組んでいるページがあります: http://zhilkin.com/socio/en/

Traitsテーブルは無視しても問題ありません。Sociotypesテーブルでやりたいことは、タイプをクリックすると、右側の説明の下にあるツイート ボタンのデータ テキストがそれに応じて変更されることです。

現在、次のように機能します。「ドン・キホーテ」にカーソルを合わせるかクリックすると、データテキストが「...ドン・キホーテ...」に設定され、後で「デュマ」をクリックしても同じままです。逆もまた同様です。「Dumas」にカーソルを合わせるかクリックすると、データ テキストが「... Dumas ...」に設定され、「Don Quixote」をクリックしても変化しません。(他のタイプは現在空です。)

そのため、ツイート ボタンはスクリプトを初めて実行したときにのみ変更されますが、タイプが変更されるたびに更新する必要があります。

4

3 に答える 3

42

私は今朝これに数時間苦労しましたが、ついにうまくいきました! 問題は基本的に、twitter widgets.jsスクリプトをページに1 回しか含めることができず、そのスクリプトdata-textが読み込み時に属性を評価することです。したがって、あなたの例では、スクリプトをロードするdata-textに属性を動的に設定します。これは期待どおりに機能します。ただし、スクリプトは既に実行されているため、それ以上更新することはできません。

この記事twttr.widgets.load()で、実行時に再度呼び出してボタンを再評価して再レンダリングできることを示唆しているのを見ましたが、それはうまくいきませんでした。<a>これは、その関数がタグではなくタグを再評価するため<iframe>です!

したがって、ここで指摘されている<iframe>ように、解決策は、レンダリングされた を DOM から完全に削除し<a>、適切なすべての属性を持つ新しい要素を作成してから、呼び出しtwttr.widgets.load()て最終的に再評価し、 に変換すること<iframe>です。

実際の例については、このフィドルを参照してください。

于 2012-05-11T12:08:03.220 に答える
2

Twitter のcreateShareButton API 呼び出しを使用することもできます。

function callAsRequired(){
  var nodeID = 'YourTwitterNodeID'
  
  //Remove existing share button, if it exists.
  var myNode = document.getElementById(nodeID);
  while (myNode.firstChild) {
    myNode.removeChild(myNode.firstChild);
  }

  //Create button and customise
  twttr.widgets.createShareButton(
    'http://your.custom.url.here/',
    document.getElementById(nodeID),
    {
      count: 'none',
      text: 'Your custom tweet here'
    });
}
于 2017-01-03T09:39:58.500 に答える
0

eachループを使用しているため、if代わりにステートメントを 使用できます。

  $(document).ready(function(){
       $('a[data-text]').each(function(){
          if (theCase == 1) {
             $(this).attr('data-text', Text_Variant_1);
          }
          else if (theCase == 2) { ... }
        })
 });
于 2012-05-07T17:36:49.587 に答える