2012-05-07 57 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' 
    }; 
}