2012-05-07 87 views
17

這一問題屬於非常接近我後:Replace an Attribute in the Tweet Button with Jquery動態更改資料Tweet按鈕「數據文本」內容

然而,the suggested solution作品只有一次。也就是說,我不能在我的開關使用它聲明是這樣的:

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'); 
      }); 
     ... 
    } 

會發生什麼事是,數據文本屬性根據任一種情況下發生的第一和不改變後設置。

如何根據需要更改數據文本 Tweet Button的屬性?

更新:這裏是我工作的頁面:http://zhilkin.com/socio/en/

性狀表可以安全地忽略。我想要做的社會類型表是,當你點擊一個類型時,右側描述下面的Tweet按鈕的數據文本應該相應地改變。

現在,它的工作原理是這樣的:如果我將鼠標懸停或點擊「堂吉訶德」,然後數據文本被設置爲「......堂吉訶德......」,和它保持不變,如果我點擊之後的「杜馬」。反之亦然:如果我懸停在或點擊「Dumas」,那麼數據文本被設置爲「... Dumas ...」,如果點擊「Don Quixote」則不會改變。 (其他類型此刻爲空)

因此,Tweet Button僅在第一次運行腳本時發生更改,但我需要隨着類型更改多次更新。

+0

有什麼'之開關變量?你可以發佈一些更相關的代碼嗎?另外爲什麼''2「'在引號和'1'沒有引號?您的prolbem可能在那裏... – elclanrs

+0

開關變量是一個被覆蓋的元素。根據哪些元素被徘徊,我想設置Tweet按鈕的data-text屬性。 switch語句有效(我也用它來處理其他內容),但是我不能用它來多次更改數據文本(它只設置一次,然後不會更改)。 – Mikhail

回答

37

我這個奮鬥了今天上午幾個小時,但終於得到了它的工作!問題實質上是,您只能在頁面中包含twitter widgets.js腳本一次,並且該腳本在加載時評估data-text屬性。因此,在您的示例中,您可以在加載腳本之前動態設置data-text屬性,該腳本將按預期工作。但是,您可以在腳本已經運行的情況下不再進行更新。

我看到this article建議你可以在運行時再次調用twttr.widgets.load()重新評估和重新渲染的按鈕,但是這並沒有爲我工作。這是因爲該功能重新評估<a>標籤,而不是標籤!

因此,解決辦法,爲pointed out here,是從DOM中完全刪除渲染,然後調用twttr.widgets.load()終於重新評估,並把它變成一個之前進行所有的相應屬性的新<a>元素。

請參閱this fiddle作爲一個工作示例!

+0

看起來完全像我需要的東西。將嘗試實施此解決方案。非常感謝! – Mikhail

+0

工程!但Firefox和Chrome阻止彈出:( 添加這將避免阻止: onclick =「return!window.open(this.href,'tweet','menubar = no')」 – joan16v

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) { ... } 
     }) 
}); 
+0

我不認爲使用if/else而不是switch會改變任何東西。無論哪種情況先發生(可以是「t1」,可以是「t2」等),數據文本被設置爲相應的值,然後不會再發生變化(如果發生其他情況)。 – Mikhail

+0

最好看到標記,我認爲你應該使用另一種方法來達到預期的效果。 – undefined

+0

我已經添加了一個鏈接到活動頁面,並簡要說明了發生了什麼。希望能幫助到你! – Mikhail

1

您還可以使用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' 
    }; 
}