以下输入字段包含datepicker类:
<input type="text" class="datepicker" value="" />
<input type="text" class="datepicker" value="" />
<input type="text" class="datepicker" value="2011-02-15" />
<input type="text" class="datepicker" value="2011-02-16" />
我需要创建一个日期数组,排除空白值并返回最大值。以下代码似乎不会排除空白值:
var datelist = [];
$(".datepicker").each(function(i) {
if (this.value!="") {datelist[i] = this.value;}
});
datelist.sort();
datelist.reverse();
alert(datelist); //,,2011-02-16,2011-02-15
alert(datelist[0]); //undefined
有什么问题?
答案 0 :(得分:6)
它排除了空值。这就是datalist[0]
为undefined
的原因。
索引0
的值为空,因此不会执行datelist[0] = this.value;
。数组中设置的唯一值是带有键2
和3
的值,使得键0
,1
和所有>3
undefined
如果包含这些值,则不会得到undefined
,而是一个空字符串。
您不应该使用索引向数组添加值。 push()
他们:
$(".datepicker").each(function(i) {
if (this.value!="") {datelist.push(this.value);}
});
那就是说,更简洁的方法是:
var datelist = $('.datepicker[value!=""]').map(function() {
return this.value;
}).get();
答案 1 :(得分:2)
尝试
$('.datepicker[value!=""]')
答案 2 :(得分:1)
您可以使用.map
和$.grep
方法获取数组并删除空项:
将所有值放入数组中:
var datelist = $(".datepicker").map(function() { return this.value; }).get();
从数组中删除空项目:
datelist = $.grep(datelist, function(s) { return s.length != 0; });
答案 3 :(得分:0)
尝试更改此部分 -
var datelist = [];
$(".datepicker").each(function(i) {
if (this.value!="") {datelist[i] = this.value;}
});
到此 -
var datelist = [];
var index = 0;
$(".datepicker").each(function(i) {
if ( $(this).val() != "")
{
datelist[index++] = $(this).val();
}
});
答案 4 :(得分:0)
就像做a = []; a[0] = 1; a[2] = 3;
一样 - 如果你跳过索引,它将被填充undefined
值。因此,您可以将代码更改为以下内容:
$(".datepicker").each(function() {
if (this.value != "" || this.value != undefined) {
datelist[datelist.length] = this.value;
}
});
答案 5 :(得分:0)
首先,不要在第二个函数参数中使用this
- 请参阅http://fixingthesejquery.com/#slide29
然后,将值附加到列表而不是使用索引(请记住,您不为i
的某些值创建数组元素!):
if (this.value) {
datelist.push(this.value);
}
所以,代码应该是这样的:
var dateList = [];
$(".datepicker").each(function(i, elem) {
if (elem.value) {
dateList[i] = elem.value;
}
});
dateList.sort();
dateList.reverse();