Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中对列表中的日期进行排序?_Javascript_Html_Date - Fatal编程技术网

如何在javascript中对列表中的日期进行排序?

如何在javascript中对列表中的日期进行排序?,javascript,html,date,Javascript,Html,Date,由于我是初学者,我不知道如何开始排序日期列。我的表中还有一列是总价。我设法对价格栏进行了排序,因为它只涉及数字 我在下面提供的代码是如何成功地对price列进行排序的 //对数字进行排序的函数 函数sortLowest(){ var表,行,切换,i,x,y,shouldSwitch; table=document.getElementById(“示例”); 切换=真; while(切换){ 切换=错误; 行=表。行; 对于(i=1;iparseInt(y.innerHTML.toLowerCa

由于我是初学者,我不知道如何开始排序日期列。我的表中还有一列是总价。我设法对价格栏进行了排序,因为它只涉及数字

我在下面提供的代码是如何成功地对price列进行排序的

//对数字进行排序的函数
函数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;
            }
        }