如何让jquery根据当前文本更改文本

时间:2015-11-19 19:55:32

标签: jquery ejs

我有一个产品搜索结果prodArray,用于渲染我的.ejs脚本。它由基于先前查询的多个对象组成。每个对象都包含一个startDate字段,该字段是Date()个对象。我希望moment.js以更愉悦的方式显示这个日期(我决定的格式)。我使用ejs使用我的date.toString()填充<span>标记。然后我希望jQuery在加载文档时选择它并以我想要的格式显示它。

这可能不是最好的做事方式。我对任何建议持开放态度。

我的.ejs代码如下:

<h1>My List of products</h1>
<% prodArray.forEach(function (product) { %>
  <div class="product">
    <h2><%= product.name %></h2>
    <p>Starting: <span class="moment"><%= product.startDate.toString() %></span><br/>
    Places: <%= product.places.max %><br/>
    </p>
  </div>
<% }) %>

<script>
  $(document).ready(function () {
    // $('.moment').text( moment( $(this).text() ).format('MMM Do YYYY hh:mm') )
    // DOES NOT RUN.

    // $('.moment').text( moment( $(this).contents() ).format('MMM Do YYYY hh:mm') )
    // POPULATES ALL MY PRODUCTS WITH THE SAME DATE

    // $('.moment').text( moment( $(this).val() ).format('MMM Do YYYY hh:mm') )
    // POPULATES ALL MY PRODUCTS WITH 'INVALID DATE'

    /* 
    $('.moment').on("ready",function () {
      var datestr = $(this).text();
      $(this).text(moment(datestr).format('MMM Do YYYY hh:mm'))
    })
    DOES NOT AFFECT ANYTHING. */
  })
</script>

我尝试过的一些内容在脚本中被注释掉,并且它们的效果都在下面写出来。有没有

$(.moment).nothinghappened(function () {
// blah
})

事件?

如果您有任何建议我会非常感激。

2 个答案:

答案 0 :(得分:0)

我认为你可以做点什么

<p>Starting: <span class="moment"><%= moment(product.startDate).format('dd-MMM-YYYY') %></span><br/>

答案 1 :(得分:0)

所以我通过消除在客户端使用时刻的需要解决了这个问题。如果在渲染ejs时将片段作为局部变量传递。

var moment = require('moment')
router.get('/product', function (req,res,next) {
  mongoose.model('products').find({}).exec(functions (error, prodArray) {
    res.render('productTemplate',{
      prodArray: prodArray,
      moment: moment
    })
  })
})

然后您可以像这样使用它

<p>Starting: <span class="moment"><%= moment(product.startDate).format('MMM Do YYYY hh:mm') %></span>

在你的模板中。

归功于@Sean Murin和@Zohaib Ijaz