Javascript 使用jQuery,如何将ajax文本加载到多个.class中,而不是#id';s

Javascript 使用jQuery,如何将ajax文本加载到多个.class中,而不是#id';s,javascript,jquery,ajax,Javascript,Jquery,Ajax,在我的网站上,我有一个评论表单,可以告诉你评论发布的时间。 下面是每10秒只重新加载包含日期的范围的代码,而不是整个注释div(以防止页面延迟) 我的函数不起作用,我也不想为每个评论的日期字段创建一个单独的函数。请有人指出我的问题好吗?谢谢 编辑 我在javascript中使用它将时间更改为可读的日期 function prettyDate(time){ var date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]

在我的网站上,我有一个评论表单,可以告诉你评论发布的时间。
下面是每10秒只重新加载包含日期的范围的代码,而不是整个注释div(以防止页面延迟)

我的函数不起作用,我也不想为每个评论的日期字段创建一个单独的函数。请有人指出我的问题好吗?谢谢

编辑
我在javascript中使用它将时间更改为可读的日期

   function prettyDate(time){
    var date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g," ")),
        diff = (((new Date()).getTime() - date.getTime()) / 1000),
        day_diff = Math.floor(diff / 86400);

    if ( isNaN(day_diff) || day_diff < 0 || day_diff >= 31 )
        return;

    return day_diff == 0 && (
            diff < 60 && "just now" ||
            diff < 120 && "1 minute ago" ||
            diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
            diff < 7200 && "1 hour ago" ||
            diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
        day_diff == 1 && "Yesterday" ||
        day_diff < 7 && day_diff + " days ago" ||
        day_diff < 31 && Math.ceil( day_diff / 7 ) + " weeks ago";
}

// If jQuery is included in the page, adds a jQuery plugin to handle it as well
if ( typeof jQuery != "undefined" )
    jQuery.fn.prettyDate = function(){
        return this.each(function(){
            var date = prettyDate(this.title);
            if ( date )
                jQuery(this).text( date );
        });
    };
函数prettyDate(时间){
变量日期=新日期((时间| |“”)。替换(/-/g,“/”)。替换(/[TZ]/g,“”)),
diff=(((新日期()).getTime()-Date.getTime())/1000),
日差异=数学楼层(差异/86400);
如果(isNaN(日差)| |日差<0 | |日差>=31)
返回;
返回日_diff==0&&(
差值<60&“刚刚”||
差值<120&“1分钟前”||
差异<3600和数学楼层(差异/60)+“分钟前”||
差值<7200&“1小时前”||
差异<86400和数学楼层(差异/3600)+“小时前”)||
day_diff==1&“昨天”||
日差<7日和日差+“日前”||
日差<31&&Math.ceil(日差/7)+“周前”;
}
//如果jQuery包含在页面中,那么也会添加一个jQuery插件来处理它
if(jQuery的类型!=“未定义”)
jQuery.fn.prettyDate=函数(){
返回此值。每个(函数(){
var日期=prettyDate(本标题);
若有(日期)
jQuery(this).text(日期);
});
};

这将返回GMT+1,因为这就是我所在的位置。如何更改此函数以使javascript时区也成为GMT?

看起来您不能对多个元素使用
.load()
方法,但您可以将日期提取一次到变量中,然后更新所有其他元素:

$.get('/comdate.php?id=' + id, function(data) {
    $('.date').each( function() { $(this).html(data); } );
});
它将更新所有元素。尽管在上面的评论中指出了这一点,但在这个脚本中,您并没有做一些在JS中做不到的事情


在JavaScript中添加Look for对象,它可以获取当前时间并对其进行解析——函数中的所有其他内容都是易于翻译的逻辑

对于我来说,我会将ajax请求更改为只发送一次unix时间跨度,并且我会用javascript进行所有计算

var periods = ["second", "minute", "hour", "day", "week", "month", "year", "decade"];
var lengths = ["60","60","24","7","4.35","12","10"];

function nicetime(user_date)
{
    if(typeof user_date == "undefined" ) {
        return "No date provided";
    }

    var now  = new Date().getTime();
    var unix_date = user_date;

    // check validity of date
    if(unix_date == "") {   
        return "Bad date";
    }

    // is it future date or past date
    if(now > unix_date) {   
        var difference = now - unix_date;
        var tense = "ago";
    } else {
        var difference = unix_date - now;
        var tense      = "from now";
    }
    difference = difference/1000; //from milliseconds to seconds;
    for(var j = 0; difference >= lengths[j] && j < lengths.length-1; j++) {
        difference /= lengths[j];
    }

    difference = Math.round(difference);

    if(difference != 1) {
        periods[j] += "s";
    }

   return difference+" "+periods[j]+" "+tense;
}


console.log(nicetime(1378632182334));

您的代码处理的差异变量以毫秒为单位,以秒为单位。

由@ra_htial在其第一条评论中提出的建议听起来像是最好的建议,因为它不会不必要地用javascript在客户端管理的请求轮询服务器。因此,我的建议是在
.date
span元素中添加一个
数据日期
属性,它将以普通格式包含日期和时间,可以用javascript解码并用于更新人类可读的日期

下面是html在使用静态数据时的外观:

<span class="date" data-date="2013-09-08 12:37">1 min ago</span>
编辑


这里有一把小提琴,演示了它的功能。您需要更改fiddle中某个元素的
数据日期
属性,查看当前时间以查看更新。

为什么不将时间作为时间跨度加载,并使用javascript而不是ajax调用来计算时差?@ra_htial查看我的编辑此函数可以是javascript,它将保存对服务器的所有调用。您能为我将函数更改为js吗?请尝试alert($('.date').html());告诉我像这样的idI的值是多少,但是如果所有的日期都不一样,它会起作用吗?啊,不,在这种情况下,你需要在“每个”中调用“加载”。但这确实会影响服务器,所以我将考虑重新实现该功能。我已经添加了一个链接,该链接应该包含您需要的所有信息。好的,我将更改一些内容,这会在数据库中插入一个Unix日期吗这是时间戳的正确格式是。但我会看看ra_htial的答案。这是一个更好的整体方法。我一开始误解了你的意图。谢谢,现在当评论被放入数据库时,我需要什么php<代码>$date=strottime(日期(“Y-m-d H:i:s”)?该函数接受
unix时间戳
因此取决于您的方法和数据库,1-您可以在数据库中有一个时间戳字段,因此您只需要选择该字段,2-您可以在数据库中有一个
日期时间
字段,因此您需要
strotime(_字段)
。如果你想要现在的时间,你可以使用类似于
strotime(“现在”)
yours is best@Bogdan,但是我如何将GMT日期放入数据库?你还没有在数据库中存储评论的日期和时间吗?我使用这个
$date=date(“Y-m-d H:I:s”)但它以GMT-4返回,我想这样行吗<代码>$date=日期(“Y-m-d H:i:s”,mktime(日期(“H”)+4))
或者更好的做法是使用
date\u default\u timezone\u set
设置时区。
difference = difference/1000; //from milliseconds to seconds;
<span class="date" data-date="2013-09-08 12:37">1 min ago</span>
<span class="date" data-date="<?php echo $date; ?>"><?php echo nicetime($date); ?></span>
setInterval(function()
{ 
    $('.date').each(function()
    {
        var $this = $(this);
        $this.html(humane_date($this.data('date')));
    });
}, 10000);