Предполагается, что
идентификаторов - это просто уникальный идентификатор.У вас должен быть только один элемент во всем документе с указанным идентификатором.
Простое решение этого заключается в том, чтобы дать каждому элементу sidebar-date
уникальный идентификатор - поэтому для первого вызовите его id="sidebar-date-1"
ивторой вызовите его id="sidebar-date-2"
.
Если два элемента существуют с одинаковым идентификатором, document.getElementById()
всегда будет возвращать тот, который находится первым в документе.
РЕДАКТИРОВАТЬ:
Я только что понял, у вас есть еще одна проблема - вы пытаетесь сделать свои var объявлений дважды.Второе объявление не приведет к новому значению переменной, так как переменная уже была объявлена.
Вам также не нужно вызывать все части parentNode.childNode[]
, поскольку у вас уже есть нужный элемент.Их следует использовать, только если вам нужно что-то сделать с элементом и , это родительские / дочерние узлы, чего у вас нет.
Если вы хотите вместо элемента выше того, который вы получаете, не используйте element.parentNode
, дайте элементу выше его собственный идентификатор и используйте вместо него document.getElementById()
.
Эта отредактированная версия со всеми исправленными проблемами работает для меня (обновлено):
<!-- Declare all your variables once at the top of the page -->
<script type="text/javascript">var marathonDateField, now, then, gap</script>
<div class="views-row views-row-5 views-row-odd views-row-last">
<div>
<div class="sidebar-title">title1</div>
</div>
<div>
<div>
<div id="sidebar-date-1">14 November 2012</div>
</div>
</div>
<div>
<div class="sidebar-days-left">
<script type="text/javascript">
marathonDateField = document.getElementById('sidebar-date-1').innerHTML;
now = new Date();
then = new Date(marathonDateField);
gap = then.getTime() - now.getTime();
gap = Math.floor(gap / (1000 * 60 * 60 * 24));
document.write(gap + " days left");
</script>
</div>
</div>
<div>
<div class="sidebar-link">
<a href="http://my.domain.com/">Click here to read more...</a>
</div>
</div>
<div class="sidebar-pix"></div>
</div>
<div class="views-row views-row-5 views-row-odd views-row-last">
<div>
<div class="sidebar-title">title2</div>
</div>
<div>
<div>
<div id="sidebar-date-2">14 december 2011</div>
</div>
</div>
<div>
<div class="sidebar-days-left">
<script type="text/javascript">
marathonDateField = document.getElementById('sidebar-date-2').innerHTML;
now = new Date();
then = new Date(marathonDateField);
gap = then.getTime() - now.getTime();
gap = Math.floor(gap / (1000 * 60 * 60 * 24));
document.write("" + gap + " days left");
</script>
</div>
</div>
<div>
<div class="sidebar-link">
<a href="http://my.domain.com/">Click here to read more...</a>
</div>
</div>
<div class="sidebar-pix"></div>
</div>
ДРУГОЕ РЕДАКТИРОВАНИЕ:
Как говорит ufotds, вам было бы гораздо лучше сделать это с помощью функции.Например,
В верхней части документа, предпочтительно в :
<script type="text/javascript">
function writeGapString (elID) {
var now, then, gap
now = new Date();
then = new Date(document.getElementById('sidebar-date-'+elID).innerHTML);
gap = Math.floor((then.getTime() - now.getTime()) / (1000 * 60 * 60 * 24));
document.write(gap + " days left");
}
</script>
Затем для первой отображаемой части:
<div class='sidebar-days-left'>
<script type="text/javascript">writeGapString(1);</script>
</div>
Затем для второйотображаемая часть:
<div class='sidebar-days-left'>
<script type="text/javascript">writeGapString(2);</script>
</div>
... и т. д. и т. п.
ДАЙТЕ ДРУГОЕ РЕДАКТИРОВАНИЕ:
ВотНаиболее краткая версия кода, которая делает то, что вы хотите (я удалил нагрузку ненужных
с).Все, что вам нужно сделать при генерации кода, это увеличить значение, добавленное в конец идентификатора для контейнера даты
, и передать одно и то же (увеличенное) значение в функцию для каждой итерации.
<script type="text/javascript">
function writeGapString (elID) {
var now, then, gap
now = new Date();
then = new Date(document.getElementById('sidebar-date-'+elID).innerHTML);
gap = Math.floor((then.getTime() - now.getTime()) / (1000 * 60 * 60 * 24));
document.write(gap + " days left");
}
</script>
<div class="views-row views-row-5 views-row-odd views-row-last">
<div class="sidebar-title">title1</div>
<div id="sidebar-date-1">14 November 2012</div>
<div class="sidebar-days-left">
<script type="text/javascript">writeGapString(1);</script>
</div>
<div class="sidebar-link">
<a href="http://my.domain.com/">Click here to read more...</a>
</div>
<div class="sidebar-pix"></div>
</div>
<div class="views-row views-row-5 views-row-odd views-row-last">
<div class="sidebar-title">title2</div>
<div id="sidebar-date-2">14 december 2011</div>
<div class="sidebar-days-left">
<script type="text/javascript">writeGapString(2);</script>
</div>
<div class="sidebar-link">
<a href="http://my.domain.com/">Click here to read more...</a>
</div>
<div class="sidebar-pix"></div>
</div>
Кстати, это один из тех редких случаев, когда