Как применить javascript ко всем сообщениям Tumblr в основной ленте, а не только к самому последнему сообщению

#javascript #tumblr

#javascript #tumblr

Вопрос:

JS total noob здесь.

Я пытаюсь применить этот код внутри файла темы tumblr, но он применяется только к самому последнему сообщению в основной ленте. Это делается для отображения количества комментариев для disqus, но с использованием {sourcelurl}

 {block:ContentSource}
<a href="{permalink}" id="disqus-comment-count">0</a>Comments
<script>
let sourceurl = '{sourceurl}'
var disqusVar = sourceurl.replace("https://href.li/?","")   '#disqus_thread';
$("#disqus-comment-count").attr("data-disqus-url", disqusVar);
</script>
{/block:ContentSource}
 

Для тех, кому интересно, скрипт должен быть заключен в {block:ContentSource}{/block:ContentSource} для работы переменной {sourceurl} .

Есть идеи, почему это может быть?

Комментарии:

1. Из этого примера сложно определить, можете ли вы создать jsfiddle или аналогичный и / или ссылку на свой блог. Я полагаю, вы хотите повторить этот блок под каждым сообщением? В этом случае $("#disqus-comment-count") он должен быть уникальным, поскольку он использует идентификатор. Будет способ ссылаться на каждое количество сообщений, используя. closest() или что-то подобное. Если вы выводите это под каждым сообщением, что '{sourceurl}' оценивается? Отличается ли это для каждого сообщения?

2. @lharby Спасибо за ваш ответ. Ссылка на пример блога. предполагается, что link {sourceurl} выводит ссылку в поле источника содержимого сообщения Tumblr при создании сообщения, которое связывает его с URL-адресом потока Disqus. Так что да, вы правы, это отличается для каждого сообщения. Количество комментариев, похоже, работает внутри самого сообщения, но не на главной странице ленты, где оно применяется только к первому сообщению.

3. Да, здесь есть пара проблем: вы объявляете sourceurl с помощью let , который работает на первой итерации, но позже вы пытаетесь сбросить let (обычно вы это делаете let sourceurl = someVar , а затем позже sourceurl = anotherVar (без let). Другая проблема заключается в том, что #disqus-comment-count это идентификатор, поэтому jQuery будет ожидать его только один раз в dom. Есть способ перебирать идентификаторы, используя .attr() однако было бы лучше, если бы вы могли изменить disqus href на classname . Если вы можете поместить всю тему tumblr в pastebin, я мог бы попробовать. Смотрите: imgur.com/a/nRJcqyg

4. @lharby Ах, теперь, когда вы указали на это, дублирующийся var и уникальный идентификатор имеют смысл. Итак, теоретически, для ленты (не внутри сообщения) потребуется другой цикл? В настоящее время внутри post работает нормально. Вот весь HTML-код tumblr. [ссылка] ( pastebin.com/SQ8s5pxV )

5. @lharby Другим аспектом может быть добавление data-disqus-url в href, похоже, работает до вывода уникального sourceurl для каждого сообщения. <a href="{permalink}" id="disqus-comment-count" data-disqus-url="{sourceurl}">0</a> Но все еще должен быть JS (цикл?) Для удаления href.li в URL-адресе (что характерно для tumblr). Для этого и нужен .replace . Еще раз спасибо за помощь.