2015-11-19 6 views
0

У меня есть результат поиска продукта prodArray, который используется при рендеринге моего сценария .ejs. Он состоит из нескольких объектов, основанных на предыдущем запросе. Каждый объект будет содержать поле startDate, которое является объектом Date(). Я хочу, чтобы time.js отображал эту дату более приятным способом (формат, который я решил). Я заполняю тег <span> своей date.toString() с помощью ejs. Затем я хочу, чтобы jQuery забирал это при загрузке документа и представлял его в нужном формате.Как получить 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 
}) 

мероприятие?

Если у вас есть предложения, я бы очень признателен.

+0

кто имел подобную проблему, которая могла бы помочь - http://stackoverflow.com/a/27659332/4214571 –

ответ

0

Я думаю, что вы можете сделать что-то вроде

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

нет необходимости использовать JQuery для обновления этого значения –

+0

только посмотрев ваш ответ сейчас. Вам также нужно передать момент как локальную переменную, как я показал в своем ответе. Спасибо, что нашли время, чтобы помочь мне. – seamusgalla

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 Мурин и @Zohaib Ijaz

Смежные вопросы