Используете jQuery для обновления атрибута st_url этой кнопки chicklet? - PullRequest
4 голосов
/ 11 мая 2011

Я динамически обновляю атрибут 'st_url' всех общих ресурсов этого промежутка до URL видео, по которому щелкнул jQuery.В Firebug вы можете видеть, что он обновляет атрибут st_url моих пролетов, однако я делю эту кнопку все еще привязанной к исходному URL.Я читал, что мне, возможно, придется заново установить элементы, но я не уверен, как лучше это сделать?Кто-нибудь сделал это или есть представление о лучшем способе повторной инициализации кнопок с обновленным URL?Спасибо!

Sharethis включает в себя и init:

<script type="text/javascript">
    var switchTo5x=true;
</script>
<script type="text/javascript" src="http://w.sharethis.com/button/buttons.js"></script>
<script type="text/javascript">
    stLight.options({publisher:'xxxx'});
</script>

Моя разметка:

<span st_url="http://sharethis.com" class='st_stumbleupon' ></span>
<span st_url="example" class='st_facebook' ></span>
<span st_url="example" class='st_twitter' ></span>
<span st_url="example" class='st_email' ></span>

Мой jQuery для обновления attr = "st_url", когда пользователь нажимает навидео:

//note: this is triggered by .bind('click')
var youtubeID = $(this).attr('id');
$('#container div > span').each(function(){
    //update sharethis to current video
    $(this).attr('st_url','http://www.youtube.com/watch?v=' + youtubeID);
});

Ответы [ 4 ]

4 голосов
/ 25 января 2013

Вот код из моего проекта.Надеюсь, вы могли бы использовать его.

// define attributes for buttons
settings.share_buttons = [
    ['facebook','st_facebook_large','Facebook','Share on Facebook'],
    ['twitter','st_twitter_large','Tweet','Share on Twitter'],
    ['pinterest','st_pinterest_large','Pinterest','Share on Pinterest'],
    ['linkedin','st_linkedin_large','LinkedIn','Share on LinkedIn'],
    ['googleplus','st_googleplus_large','Google +','Share on Google +'] 
]; //[service,class,displayText,title]

// all code under could be placed into a function and bind on a click event 
// (don't forget about variable with URL, 'our_link_to_share').

//if block with buttons already exists
if (document.getElementById('share_this_id')){
    $('#share_this_id' > span').each(function(){
     $(this).removeAttr('st_url').attr('st_url',our_link_to_share).empty();
        stWidget.addEntry({
            "service":$(this).prop('service'),
            "element":this,
            "url":$(direct_link).prop('value'),
            "title":$(this).prop('title'),
            "type":"large",
            "text":$(this).prop('displayText'),
            "image":"http://www.softicons.com/download/internet-icons/social-superheros-icons-by-iconshock/png/256/sharethis_hulk.png",
            "summary":"My site"
        });
    });
}// if not, we'll create it
else{
    $('body').append($('<div>').prop('id', share_this_id).prop('class', 'share_this'));
    var share_this = document.getElementById('share_this_id');
    for(i=0; i&ltsettings.share_buttons.length; i++){
        $(share_this).append($('<span>').attr('st_url', our_link_to_share).prop('class', settings.share_buttons[i][1]).prop('displayText', settings.share_buttons[i][2]).prop('title', settings.share_buttons[i][3]).prop('service', settings.share_buttons[i][0]));
    }
}
if (stButtons){stButtons.locateElements();},
3 голосов
/ 01 марта 2012

Поскольку в ShareThe нет вызова updateEntry, вам нужно использовать jhuery's .html () для воссоздания ваших элементов внутри контейнера, а затем заново заполнить каждый из них, используя отдельные вызовы stWidget.addEntry для идентификатора диапазона.

1 голос
/ 05 мая 2012

Я использую следующий фрагмент кода для повторной инициализации кнопок ShareThis после загрузки новой страницы через ajax.Просто убедитесь, что добавили в свой ключ издателя:

$.ajax({  
    url: 'http://w.sharethis.com/button/buttons.js',  
    dataType: 'script',  
    success: function(){  
    stLight.options({  
    publisher: 'xxx',  
    onhover: false  
    });  
    },  
    cache: true  
});  

Первоначально я нашел фрагмент, в месте, на которое я ссылаюсь ниже ниже, после долгого поиска хорошего решения.Повторное размещение здесь, потому что он был похоронен в массе другого слишком сложного кода: http://forums.sharethis.com/topic.php?id=3937#post-84933

0 голосов
/ 13 января 2016

В конце концов я также переписал весь блок.Я делал это следующим образом

<div id="share-buttons">
    <button>custom stuff</button>
</div>

<div id="share-template" style="display:none">
    <span class='st_facebook_large' displayText='Facebook'></span>
    <span class='st_twitter_large' displayText='Twitter' st_via="Myself"></span>
    <span class='st_linkedin_large' displayText='LinkedIn'></span>
    <span class='st_email_large' displayText='Email'></span>
</div>

каждый раз, когда менялся URL для обмена:

var url=newurl, title = newtitle;
$('#share-buttons > span.st_dynamic').remove();
$('#share-template > span').empty().unbind().removeAttr('st_processed').each(function(){
    $(this).clone().prependTo('#share-buttons')
        .attr('st_url',url)
        .attr('st_title',title)
        .addClass('st_dynamic');
});
if (window.stButtons) stButtons.locateElements();

все пустые (). Unbind.removeCrap () показались необходимыми.также необходимо сбросить st_title - он где-то был кеширован.

YMMV, тем более, что keys.js является внешним и этот недокументированный материал изменяется: - /

...