我已经创建了一个按照我想要的方式工作的函数,jsfiddle链接如下。基本上它抓取日期列表,命令它们,如果日期已经过去则删除li项目,将结果限制为1,然后将其重新格式化为可读顺序。结果是仅显示尚未通过的下一个日期。
HTML
<div class="over">
<ul id="test">
<li>2014-05-22</li>
<li>2021-11-04</li>
<li>2023-06-04</li>
</ul>
</div>
<div class="over">
<ul id="test">
<li>2014-05-19</li>
<li>2021-08-04</li>
<li>2009-06-04</li>
</ul>
</div>
jQuery
$(".over ul").children().each(function (index) {
// get todays date
var marDate = $(this).text();
var d = new Date();
var month = d.getMonth() + 1;
var day = d.getDate();
var output = d.getFullYear() + '-' + (month < 10 ? '0' : '') + month + '-' + (day < 10 ? '0' : '') + day;
// sort dates
var elems = $.makeArray($("ul").children());
elems.sort(function(b, a) {
return new Date( $(a).text() ) < new Date( $(b).text() );
});
$(this).parent().html(elems);
// check if date has passed
if (output > marDate) {
$(this).remove();
}
});
// limit results to 1
$("ul").children().each(function (index) {
var displayAmt = 1;
$('ul').children().slice(displayAmt).remove();
});
//split string and reorder it to normal format
var data = $('ul').children().text();
var arr = data.split('-');
$("ul").children().html("<span class='day'>" + arr[2] + "</span>" +" "+ "<span class='month'>" + arr[1] + "</span>");
我遇到的问题是我希望这个函数发生在每个被称为'over'的div中。我应该能用
包装所有内容吗?$('.over').each(function(){
// everything here
});
我似乎无法让它工作,它只是从两组li中获取两组信息,只提供一个输出,或结果未定义。
不太确定我哪里出错了,而且,如果我的其他任何方法都非常错误,请告诉我,我对jQuery很新。感谢。
**编辑**
我想通了,对于任何有兴趣的人,他都是我工作的小伙子
答案 0 :(得分:1)
试试这个:
$.each($(".over ul li"), function(){
//your code here
})
答案 1 :(得分:1)
当您使用.each()
时,当前项目将位于this
。所以你可以:
$('.over').each(function(){
$('...', this)...
});
奇数$('...', this)
表示:选择加工元素,但只选择this
内的 。因此,您可以将$('...')
视为$('...', document)
如果您只想要this
的直接子女,那么您可以使用$(this).children('li')
。这将只匹配直接的孩子,而不是孙子。
相关: