如何在javascript中对列表中的日期进行排序?
由于我是初学者,我不知道如何开始排序日期列。我的表中还有一列是总价。我设法对价格栏进行了排序,因为它只涉及数字 我在下面提供的代码是如何成功地对price列进行排序的如何在javascript中对列表中的日期进行排序?,javascript,html,date,Javascript,Html,Date,由于我是初学者,我不知道如何开始排序日期列。我的表中还有一列是总价。我设法对价格栏进行了排序,因为它只涉及数字 我在下面提供的代码是如何成功地对price列进行排序的 //对数字进行排序的函数 函数sortLowest(){ var表,行,切换,i,x,y,shouldSwitch; table=document.getElementById(“示例”); 切换=真; while(切换){ 切换=错误; 行=表。行; 对于(i=1;iparseInt(y.innerHTML.toLowerCa
//对数字进行排序的函数
函数sortLowest(){
var表,行,切换,i,x,y,shouldSwitch;
table=document.getElementById(“示例”);
切换=真;
while(切换){
切换=错误;
行=表。行;
对于(i=1;i<(rows.length-1);i++){
shouldSwitch=false;
x=行[i].getElementsByTagName(“TD”)[6];
y=行[i+1].getElementsByTagName(“TD”)[6];
if(parseInt(x.innerHTML.toLowerCase())>parseInt(y.innerHTML.toLowerCase()){
shouldSwitch=true;
打破
}
}
如果(应切换){
行[i].parentNode.insertBefore(行[i+1],行[i]);
切换=真;
}
}
}
下面是html代码
<p id="rating">Filter by Price:
<select id="myList" class='form-control' style="width: 100%">
<option id="stylesheet1" value="low">Lowest-Highest</option>
<option id="stylesheet2" value="high">Highest-Lowest</option>
</select></p>
<script>
document.getElementById("myList").onchange = function() {
var sheet = document.getElementById("myList").value;
if (sheet == "high") {
sortHighest();
} else {
sortLowest();
}
return false
};
</script>
按价格筛选:
最低最高
最高最低
document.getElementById(“myList”).onchange=function(){
var sheet=document.getElementById(“myList”).value;
如果(图纸=“高”){
最悲哀的();
}否则{
sortLowest();
}
返回错误
};
使用排序方法肯定会更容易,但我假设您需要使用与上面类似的逻辑。
您还需要处理日期,因此需要在排序之前将字符串/文本转换为日期;意思是使用Date.now()或new Date()
我想您确实得到了rows=table.rows的行
而getElementsByTagName(“TD”)[7]
为您提供了日期列(我使用7作为示例,因为您在描述中写了6作为价格,所以请使用正确的列索引来获取问题的日期)。
如果这些假设是正确的,您可以通过这样做并使用与上述日期类似的逻辑来重新排序:
while (switching) {
switching = false;
rows = table.rows;
for (i = 1; i < (rows.length - 1); i++) {
shouldSwitch = false;
x = new Date(rows[i].getElementsByTagName("TD")[7].innerHTML.split('/').reverse().join(', '));
y = new Date(rows[i + 1].getElementsByTagName("TD")[7].innerHTML.split('/').reverse().join(', '));
if (x > y) {
shouldSwitch = true;
break;
}
}
if (shouldSwitch) {
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
switching = true;
}
}
while(切换){
切换=错误;
行=表。行;
对于(i=1;i<(rows.length-1);i++){
shouldSwitch=false;
x=新日期(行[i]。getElementsByTagName(“TD”)[7]。innerHTML.split(“/”).reverse().join(“,”);
y=新日期(行[i+1]。getElementsByTagName(“TD”)[7]。innerHTML.split('/')。reverse().join(',');
如果(x>y){
shouldSwitch=true;
打破
}
}
如果(应切换){
行[i].parentNode.insertBefore(行[i+1],行[i]);
切换=真;
}
}
注:我之所以将“2019年9月16日”改为“2019年9月16日”,并添加了.split('/').reverse().join(',')
,原因是类似于新日期('2019年9月16日')
的内容与新日期('2019年9月16日')
的内容不一样
请告诉我此解决方案是否解决了您的问题,或者您是否有任何问题。到目前为止您尝试了什么?您还可以显示代码吗?是否要使用javascript在浏览器中排序?也许在后端对数据进行排序比在Rest中更好,并在后端响应后更新表。看一看,不要自己开发排序算法。而是使用数组中的排序函数:非常感谢,它工作得很好。除了join(“,”)之外,我还可以使用其他符号,比如join(“.”)吗?很高兴它能起作用:)join接受字符串作为参数,
new Date
将使用“.”而不是“,”,所以你可以。很好的解释。你帮了我的忙。如果我想按月份对日期排序,我该怎么做呢?这是另一回事。您可以按中间编号.split('/')[1]
进行排序,但您将无法使用新日期进行排序
while (switching) {
switching = false;
rows = table.rows;
for (i = 1; i < (rows.length - 1); i++) {
shouldSwitch = false;
x = new Date(rows[i].getElementsByTagName("TD")[7].innerHTML.split('/').reverse().join(', '));
y = new Date(rows[i + 1].getElementsByTagName("TD")[7].innerHTML.split('/').reverse().join(', '));
if (x > y) {
shouldSwitch = true;
break;
}
}
if (shouldSwitch) {
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
switching = true;
}
}