![](/img/trans.png)
[英]Can I load jQuery dynamically to a local variable rather than to window?
[英]Using jQuery, how can I ajax load text into multiple .classes rather than #id's?
在我的網站上,我有一個評論表格,告訴您多久前發布評論。
下面的代碼僅每10秒重新加載一次包含日期的跨度,而不是整個注釋div(以防止出現頁面滯后)
$(function(){
setInterval(
function(){
var id = $('.date').html();
$('.date').load('/comdate.php?id=' + id); }
,10000);
});
我的功能無法正常工作,我真的不想為每個評論的日期字段都設置單獨的功能。 請有人指出我的問題嗎? 謝謝
編輯
我在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 );
});
};
這將返回GMT + 1,因為那是我所在的位置。 如何更改此功能,以使javascript時區也成為GMT?
對我來說,我將更改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));
例:
注意我在您的功能中所做的唯一更改是:
difference = difference/1000; //from milliseconds to seconds;
您的代碼處理的差異變量以毫秒為單位,應以秒為單位。
@ra_htial在他的第一條評論中提出的建議聽起來像是最好的建議,因為它不會不必要地輪詢請求,而請求可以使用javascript在客戶端進行管理。 因此,我的建議是向.date
span元素添加data-date
屬性,該屬性應包含純格式的日期和時間,可以使用javascript進行解碼並用於更新人類可讀的日期。
這是帶有靜態數據的html的外觀:
<span class="date" data-date="2013-09-08 12:37">1 min ago</span>
或從您的php腳本輸出:
<span class="date" data-date="<?php echo $date; ?>"><?php echo nicetime($date); ?></span>
這是更新日期內容的javascript(我使用了本文http://www.zachleat.com/web/yet-another-pretty-date-javascript/中的格式化功能,但還有其他替代方法,例如John Resig的Pretty Date ):
setInterval(function()
{
$('.date').each(function()
{
var $this = $(this);
$this.html(humane_date($this.data('date')));
});
}, 10000);
編輯
這是一個小提琴,說明了功能http://jsfiddle.net/FXERS/ 。 您需要將小提琴中的元素之一的data-date
屬性更改為當前時間,以查看其更新。
看起來您可以在多個元素上使用.load()
方法,但是您可以一次將日期提取到變量中,然后更新所有其他元素:
$.get('/comdate.php?id=' + id, function(data) {
$('.date').each( function() { $(this).html(data); } );
});
哪個更新所有元素。 盡管上面的注釋中已指出,但是您在該腳本中並沒有做任何工作,而這在JS中是無法完成的。
經過編輯后,在JavaScript中添加了 Look at at Date對象,它可以獲取當前時間並進行解析-函數中的其他所有內容都只是易於翻譯的邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.