Я пытаюсь уменьшить значение поля Time Countdown 2015-10-15 на 5 дней
окончательное значение должно быть 2015-10-10

<tr>
<td style="white-space: nowrap;" width="30%" class="clsGridCellBase searchable">Time Countdown&nbsp;</td>
<td width="70%" class="clsGridCellBase searchable ">2015-10-15</td>

Мне было интересно, есть ли более элегантный способ сделать это в JQuery. Это то, что я пробую:

var date =    $('td').filter(function(i) {
           $(this).html().indexOf('*Time Countdown*') >= 0;
}).next().text();

var newDate = new Date(date) - 5;
//post the value to the same field.

 var date =    $('td').filter(function(i) {
               $(this).html().indexOf('*Time Countdown*') >= 0;
    }).next().text(newDate);
0
JavaSheriff 16 Окт 2015 в 18:11

3 ответа

Лучший ответ

пытаемся сократить 5 дней от значения поля Time Countdown

Если правильно интерпретируете вопрос, попробуйте использовать :contains(), .text(), Date.prototype.getDate(), String.prototype.replace()

$("table td:contains(Time Countdown)")
.next("td").text(function(_, date) {
  var d = new Date(date); 
  return date.replace(/\d+$/, d.getDate() - 5)
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
<tr>
  <td style="white-space: nowrap;" width="30%" class="clsGridCellBase searchable">Time Countdown&nbsp;</td>
  <td width="70%" class="clsGridCellBase searchable ">2015-10-15</td>
</tr>
  </table>
1
guest271314 16 Окт 2015 в 15:33

Есть пара недостатков:

  • Фильтр не найдет ячейки с указанной датой
  • Расчет слишком простой

Я сделал здесь скрипку, которая работает: http://jsfiddle.net/daeLu5ee/

Основная часть:

var date =    $('#in').html();
var newDate = new Date(date);
newDate.setTime(newDate.getTime() - (5*24*3600*1000));

 $('#out').html(newDate.toLocaleString());
0
Axel Amthor 16 Окт 2015 в 15:27

Вы можете сделать все это в одной цепочке, найдя правильный td и предоставив функцию функции .text(), которая возвращает замененные данные. Вы также можете получить доступ к текущему тексту внутри этого метода.

$('td').filter(function(){
    return $(this).html().indexOf("Time Countdown")>-1;  
}).next().text(function(){
    var current = $(this).text().split('-');
    var d = new Date(current[0],current[1],current[2]);
    d.setDate(d.getDate() - 5);
    return d.getFullYear() + '-' + d.getMonth() + '-' + d.getDate();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td style="white-space: nowrap;" width="30%" class="clsGridCellBase searchable">Time Countdown&nbsp;</td>
<td width="70%" class="clsGridCellBase searchable ">2015-10-15</td>
</tr>
</table>
1
Jamiec 16 Окт 2015 в 15:31