我使用 PHP 扫描目录并列出所有 .xml 文件。每个 XML 文件都包含“名称”元素和“日期”元素。每个 XML 文件的“name”元素作为选项列在选择列表中。这工作得很好,但是,每个 XML 文件中的“日期”元素都不同,并且包含如下日期格式:mm/dd/yyyy。我想要弄清楚如何做是根据日期对项目进行排序,最早的日期是列表中的第一个,最新的日期在最后。
现在假设每个项目的“日期”元素都有不同的值。我需要对这些项目进行排序,最早日期在前。我不确定如何将“日期”元素数据存储在某处,以便 JavaScript 可以处理它。如果这是一个非常模糊的描述,我很抱歉,它已经让我困惑了一段时间,尝试解释起来也很混乱。
UPDATED
所以现在这就是我正在做的工作:
<select name="sel_id" onchange="this.form.submit()" size="20">
<option value="item1">Item 1</option>
<option value="item2">Item 2</option>
<option value="item3">Item 3</option>
<option value="item4">Item 4</option>
</select>
我想最有帮助的一件事是知道除了 value 属性之外是否有一种方法可以将日期存储在标签中的某个位置,看看它是如何使用的。日期本身不是问题,我已经想通了,只需将其存储在某个地方以便可以称为客户端即可。
Updated
你需要:
- 对日期使用自定义属性
- 使用 sort() 函数的自定义比较函数参数
- 转换为数组以使排序成为可能
- 转换日期以进行字符串比较 (mm/dd/yyyy -> yyyy-mm-dd)
查看实际效果
[测试版本:IE 5.5+、FF 2+、Chrome 4+、Safari 4+、Opera 9.6+]
HTML:
<select name="sel_id" id="sel_id" size="4">
<option value="item2" date="02-01-2009">Item 2</option>
<option value="item3" date="01-05-2010">Item 3</option>
<option value="item1" date="10-06-2007">Item 1</option>
<option value="item4" date="04-05-2011">Item 4</option>
</select>
JavaScript:
// array functions are not working
// on nodeLists on IE, we need to
// to convert them to array
function toArray( obj ) {
var i, arr = [];
for ( i = obj.length; i--; ){
arr[i] = obj[i];
}
return arr;
}
// custom compare function for sorting
// by the hidden date element
function sortByDate( el1, el2 ) {
var a = convertToDate( el1.getAttribute("date") ),
b = convertToDate( el2.getAttribute("date") );
if ( a < b ) return -1;
else if( a > b ) return 1;
else return 0;
}
// convert date for string comparison
function convertToDate( date ) {
date = date.split("-");
return date[2] + "-" + date[0] + "-" + date[1];
}
// select the elements to be ordered
var itemsId = document.getElementById("sel_id"),
items = itemsId.getElementsByTagName("option"),
len = items.length;
// convert to array, to make sorting possible
items = toArray( items );
// do the item sorting by their date
items = items.sort( sortByDate );
// append them back to the parent in order
for ( var i = 0; i < len; i++ ) {
itemsId.appendChild( items[i] );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)