Подтвердить что ты не робот

Динамически изменить текст кнопки "данные-текст" кнопки "Tweet"

Этот вопрос очень близок к тому, что мне нужно: Заменить атрибут в кнопке Tweet с помощью 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 задается в зависимости от того, что происходит раньше и не изменяется после.

Как я могу изменить атрибут text-text кнопки Tweet столько раз, сколько мне нужно?

Обновление: здесь, на странице, над которой я работаю: http://zhilkin.com/socio/en/

Таблицу "Черты" можно безопасно игнорировать. Что я хочу делать с таблицей Sociotypes, так это то, что когда вы нажимаете на тип, текстовый текст кнопки Tweet под описанием справа должен быть соответствующим образом изменен.

Сейчас он работает следующим образом: если я нахожу или нажимаю "Дон Кихот", тогда текст данных устанавливается на "... Дон Кихот...", и он остается таким же, если я нажму "Дюма", позже. И наоборот: если я нахожу или нажимаю "Dumas", тогда текст данных устанавливается на "... Dumas..." и не меняется, если я нажму "Don Quixote". (Другие типы пустые в данный момент.)

Итак, кнопка Tweet изменяется только при первом запуске script, но мне нужно, чтобы она обновлялась столько раз, сколько меняется тип.

4b9b3361

Ответ 1

Я боролся с этим в течение нескольких часов этим утром, но, наконец, получил его работу! Проблема состоит в том, что вы можете включать только твитер widgets.js script один раз на странице, а script оценивает атрибут data-text при загрузке. Поэтому в вашем примере вы динамически устанавливаете атрибут data-text до загрузки script, который будет работать как ожидалось. Тем не менее, вы не можете делать никаких дополнительных обновлений, поскольку script уже запущен.

Я видел эту статью, предлагая вам снова позвонить twttr.widgets.load() во время выполнения, отрисовка кнопок, однако это не сработало для меня. Это происходит потому, что эта функция повторно оценивает теги <a>, а не теги <iframe>!

Итак, решение, как , указанное здесь, заключается в том, чтобы полностью удалить отображаемый <iframe> из DOM, затем создайте новый элемент <a> со всеми соответствующими атрибутами перед вызовом twttr.widgets.load(), чтобы, наконец, переоценить его и превратить в <iframe>.

Пожалуйста, смотрите эту скрипту для рабочего примера!

Ответ 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'
    };
}

Ответ 3

поскольку вы используете цикл each, вы можете использовать операторы if:

  $(document).ready(function(){
       $('a[data-text]').each(function(){
          if (theCase == 1) {
             $(this).attr('data-text', Text_Variant_1);
          }
          else if (theCase == 2) { ... }
        })
 });