2014-10-11 6 views
0

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

У меня есть что-то вроде:

<div class="tdate"> 
    Sat Oct 11 01:11:01 +0000 2014 
</div> 
<div class="tdate"> 
    Sat Oct 11 01:10:44 +0000 2014 
</div> 
<div class="tdate"> 
    Sat Oct 11 00:51:03 +0000 2014 
</div> 

И это Javascript функция:

function parseTwitterDate(tdate) { 
    var system_date = new Date(Date.parse(tdate)); 
    var user_date = new Date(); 
    if (K.ie) { 
     system_date = Date.parse(tdate.replace(/(\+)/, ' UTC$1')) 
    } 
    var diff = Math.floor((user_date - system_date)/1000); 
    if (diff <= 1) {return "just now";} 
    if (diff < 20) {return diff + " seconds ago";} 
    if (diff < 40) {return "half a minute ago";} 
    if (diff < 60) {return "less than a minute ago";} 
    if (diff <= 90) {return "one minute ago";} 
    if (diff <= 3540) {return Math.round(diff/60) + " minutes ago";} 
    if (diff <= 5400) {return "1 hour ago";} 
    if (diff <= 86400) {return Math.round(diff/3600) + " hours ago";} 
    if (diff <= 129600) {return "1 day ago";} 
    if (diff < 604800) {return Math.round(diff/86400) + " days ago";} 
    if (diff <= 777600) {return "1 week ago";} 
    return "on " + system_date; 
} 
var K = function() { 
    var a = navigator.userAgent; 
    return { 
     ie: a.match(/MSIE\s([^;]*)/) 
    } 
}(); 

То, что я пытаюсь сделать, это изменить все .tdate в новый формат (который является то, что мой javascript). Но я не знаю, как назвать эту функцию, чтобы изменить все разные .tdate. Если я назову parseTwitterDate («Сб окт 11, 00:51:03 +0000 2014»), он будет работать, но только один раз.

В принципе, я хочу видеть всю дату на своей странице в этом формате: «Сб окт 11, 01:11:01 +0000 2014» изменить на: «47 минут назад» (или независимо от результата). Но я не знаю, как вызвать функцию parseTwitterDate (tdate).

Извините за мое очень плохое объяснение. Дай мне знать, если я не сделаю себе достаточно ясно.

И большое спасибо всем, кто может мне помочь.

Большое спасибо! :)

+0

почему вы не используете идентификаторы? – Meer

+0

@Meer Поскольку у меня есть еще один DIV с тем же именем, и те же идентификаторы могут использоваться только один раз. Но почему ты спрашиваешь об этом? – JimyPP

+0

Разве вы не знаете, как написать цикл 'for'? – Barmar

ответ

1

Поскольку вы используете JQuery (или, по крайней мере, используется тег JQuery), вы можете сделать это

$(function() { 
 
    $('.tdate').each(function (index, value) { 
 
     $(value).html(parseTwitterDate(($(value).html()))) 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="tdate"> 
 
    Sat Oct 11 01:11:01 +0000 2014 
 
</div> 
 
<div class="tdate"> 
 
    Sat Oct 11 01:10:44 +0000 2014 
 
</div> 
 
<div class="tdate"> 
 
    Sat Oct 11 00:51:03 +0000 2014 
 
</div>

+1

@JimyPP Если вы только планируете включить jQuery для выполнения простого цикла, я бы настоятельно советовал использовать это. – theliberalsurfer

+0

Согласовано, следовательно, квалифицирующий комментарий, который «с тех пор, как [OP] уже использовал JQuery». – ochi

+0

Я уже использую jQuery. И это прекрасно работает. :) Спасибо @blurfus – JimyPP

0

Wadup! добавьте это в свой файл javascript.

... 

[].forEach.call(document.getElementsByClassName("tdate"), function(tdate) { 
    tdate.innerHTML = parseTwitterDate(tdate.innerHTML); 
}); 
+0

Я только что попробовал, но, похоже, это не работает. Ничего не изменилось. Но решение ниже работало просто отлично. – JimyPP

+0

Я тоже этого не видел. В любом случае, спасибо :) – JimyPP

+0

Теперь он отлично работает. Я думаю, что я буду использовать это вместо jQuery, это будет быстрее. Спасибо за помощь. @AndrewM – JimyPP