jQuery() .hide время от времени работает над обменом ссылками, добавленными через JavaScript

Я использую ShareThis/AddThis и хочу скрыть подсчет доли на моей странице, когда они равны нулю.

У меня проблема в том, что.hide() не работает надежно - он работает только в некоторых случаях, когда ссылки появляются на странице один раз. На странице с несколькими экземплярами ссылок для обмена он работает только для первого набора.

Я думаю, что это не работает из-за долгого времени, которое требуется для появления ссылок. Тело страницы показывает только этот код, который я использую:

<script type="text/javascript">
jQuery(function($) {

$('.stBubble').each(function(){         
    if($(this).text() == '0' || $(this).text() == 'New') {
        $(this).hide();
    }
});
});

Это появляется в моем нижнем колонтитуле; код ShareThis в шаблоне страницы такой:

<li><span class='st_twitter_vcount' displayText='Tweet'"></span></li>
<li><span class='st_facebook_vcount' displayText='Facebook'"></span></li>
<li><span class='st_email_vcount' displayText='Email'"></span></li>
<li><span class='st_sharethis_vcount' displayText='Share'"></span></li>

Что я должен сделать, чтобы заставить это работать?

2 ответа

Решение

Предпочтительный способ решения этой проблемы с загрузкой - найти программный способ получать уведомления, когда addThis завершает вставку на страницу. Поскольку это сторонний JS, вам придется либо найти поддерживаемый API addThis для этого уведомления, либо взломать их библиотеку (например, заменить одну из их функций на одну из ваших собственных, которая вызывает оригинал, а затем уведомляет вас).

Если вы не можете найти способ сделать предпочтительный способ, то единственный другой способ, которым я знаю, - это опросить вашу страницу, пока вы не найдете на этой странице материал addThis. Вы, вероятно, использовали бы довольно короткий интервальный таймер, который ищет некоторую часть HTML-кода addThis, который, как вы знаете, будет всегда присутствовать, когда он завершит добавление своего материала. Когда это найдено, вы можете отменить интервальный таймер и вызвать вашу функцию, чтобы скрыть то, что вы хотите скрыть. Поскольку интервальный таймер может не сразу перехватить новый контент, вы можете получить флэш-контент перед запуском JS, чтобы скрыть то, что вы не хотите видеть. Это можно обойти, добавив статическое правило CSS, которое по умолчанию скрывает все счетчики addThis, и когда ваш JS запускается, он может переопределить это, чтобы сделать нужные из них видимыми. Содержимое, которое вы хотите скрыть, никогда не будет мигать или быть видимым, если вы сделаете это таким образом.

Я должен добавить, что опрос страницы на предмет содержания является последним средством, и вы должны убедиться, что ваши интервальные таймеры всегда отменяются, даже если контент никогда не появляется. В противном случае они могут заблокировать браузер зрителя.

Я бы посмотрел вокруг на addthis api и посмотрел, сможешь ли ты найти функцию обратного вызова для происходящего события. Если это так, назовите свою функцию и затем вызывайте эту функцию каждый раз, когда происходит событие обратного вызова. Если это проблема с задержкой, это должно решить ее.

Другие вопросы по тегам