2012-05-31 89 views
3

首次發佈。所以,我有,看起來像這樣Moment.js文本格式和類

<div class="entry-time"> 
    2012-05-30T20:11:06+00:00 
</div> 

我想格式化這個出更具可讀性與moment.js一個元素來格式化一些文本。我只能用前端做到這一點。我寫了一個看起來像這樣的函數。

$(document).ready(function() { 
    function formatDate(date) { 
     formattedDate = date.text(); 
     var d = moment(formattedDate, "YYYY-MM-DDTHH:mm:ss"); 
     $(date).html(d.format("dddd, MMMM Do YYYY, h:mm:ss a")); 
    }; 

    formatDate($('.entry-date')); 
}); 

這工作,如果有一個元素,但是當有多個元素,將一切都格式化爲一個日期。我知道這與jQuery提取元素數組有關,但我不知道如何對每個元素使用entry-date類做什麼。

任何人都可以幫忙嗎?先謝謝你。

回答

6

在有什麼不對的心臟是jQuery的的.text()方法獲取「每個元素的合併文本內容匹配的元素,包括他們的後代」 (api.jquery.com/text),而不是像您打算的那樣迭代元素集。

像這樣的事情應該工作,傳遞一個函數到了jQuery的.html()setter方法:

$(".entry-date").html(function(index, value) { 
    return moment(value, "YYYY-MM-DDTHH:mm:ss").format("dddd, MMMM Do YYYY, h:mm:ss a"); 
}); 
+0

偉大的工作!非常感謝! – tastytoast

2

你需要遍歷使用jQuery的。每個方法每場比賽:

$(date).each(function(){ Format date here }); 

這對進入自己現在已有的功能formatDate。基於

+0

你是真棒。謝啦! – tastytoast

0

您目前的代碼,你可以修改你的formatDate功能這樣

$(document).ready(function() { 
    function formatDate(date) { 
     date.each(function(){ 
     var formattedDate = $(this).text(); 
     var d = moment(formattedDate, "YYYY-MM-DDTHH:mm:ss"); 
     $(this).html(d.format("dddd, MMMM Do YYYY, h:mm:ss a")); 

     }); 
    }; 

formatDate($('.entry-time')); 
}); 

而且你實際的類名稱爲entry-time,但你在呼喚像formatDate($('.entry-date'));將得到什麼作爲類entry-date不存在。

Working Fiddle

+0

你真棒。謝啦! – tastytoast

0

你必須使用每個,因爲你的選擇是一個類(因爲你用「」)可與多個DOM的作爲well..so可能是你的jQuery的事情正在返回要使用每個遍歷的數組。

$('.entry-date').each(function(){ 
    formatDate($(this).val());//if it is a text box 
}); 

OR

$('.entry-date').each(function(){ 
    formatDate($(this).text());//if it is a label 
}); 
1

你會希望通過傳遞給函數的元素循環。這可以通過jQuery中的$ .each()完成。這裏有一個簡單的例子:

http://jsfiddle.net/n1ck/QQYq2/1/

$(function(){ 
    function formatDate(dates) { 
     dates.each(function(){ 
      //get date 
      formattedDate = $(this).text(); 

      //format it 
      var d = moment(formattedDate, "YYYY-MM-DDTHH:mm:ss"); 

      //replace it 
      $(this).html(d.format("dddd, MMMM Do YYYY, h:mm:ss a")); 
     }); 
    }; 

formatDate($('.entry-time')); 
}); 
​