2016-01-01 77 views
-1

是否可以添加一个选项:“按原始顺序排序列表”(第一次按升序排序,第二次按降序排序,第三次点击排序会恢复到原来的顺序)?添加功能排序列表:选项排序列表中的初始顺序

如果可能,你可以展示如何?

此功能:

列表HTML:

<span style="font-size:140%"> <a id="Sort" href="#">Orden List</a></span><span id="set_order"> ▼</span><br /><br /> 
<b class="sidebar" id="PostList12"> 
<li>C</li> 
<li>A</li> 
<li>D</li> 
<li>B</li></b> 

功能:

window.onload = function() { 
    var desc = false; 
    document.getElementById("Sort").onclick = function() { 
     sortUnorderedList("PostList12", desc); 
     desc = !desc; 
     return false; 
    } 

功能的修复排序功能:

function compareText(a1, a2) { 
     var t1 = a1.textContent; 
     var t2 = a2.textContent; 
     return (t1 > t2) ? 1 : (t1 < t2) ? -1 : 0; 
    } 

的排序获取列表:

function sortUnorderedList(ul, sortDescending) { 
    if (typeof ul == "string") { 
     ul = document.getElementById(ul); 
    } 
    var lis = ul.getElementsByTagName("li"); 
    var vals = []; 
    for (var i = 0, l = lis.length; i < l; i++) { 
     vals.push(lis[i]); 
    } 

列表字母变小:

if (sortDescending) { 
      vals.reverse(); 
      document.getElementById("set_order").innerHTML=" ▼"; 
     } 

列表字母月牙:

else { 
      vals.sort(compareText); 
      document.getElementById("set_order").innerHTML=" ▲"; 
     } 
     for (var i = 0, l = vals.length; i < l; i++) { 
      ul.appendChild(vals[i]); 
     } 
    } 
} 
+0

是的。还有另外一个问题吗? – mico

+0

@mico,请问,你可以展示如何? – jmsmarcelo

+0

我的意思是不清楚什么是错的,只有一般的东西都是可以的。请编辑并说明究竟是什么错误。这也是为什么你拒绝了其他人的投票。 – mico

回答

0

我添加选项设置原始顺序列表

window.onload = (function() { 

     //this to store the initial order 

     var desc = 0; 
      var uls = document.getElementById('PostList12'); 
      var liss = uls.getElementsByTagName("li"); 
      var valss = []; 
      for (var is = 0, ls = liss.length; is < ls; is++) { 
       valss.push(liss[is]); 
      } 

     document.getElementById("Sort").onclick = function() { 
      sortUnorderedList("PostList12", desc); 
      desc = descOrder(desc); 
      return false; 
     } 


    function descOrder(val) { 
     return (val == 0) ? 1 : (val == 1) ? 2 : (val == 2) ? 0 : 1; 
    } 
    function compareText(a1, a2) { 
     var t1 = a1.textContent; 
     var t2 = a2.textContent; 
     return (t1 > t2) ? 1 : (t1 < t2) ? -1 : 0; 
    } 
    function sortUnorderedList(ul, sortDescending) { 
     if (typeof ul == "string") { 
      ul = document.getElementById(ul); 
     } 
     var lis = ul.getElementsByTagName("li"); 
     var vals = []; 
     for (var i = 0, l = lis.length; i < l; i++) { 
      vals.push(lis[i]); 
     } 
     if (sortDescending == 1) { 
      vals.reverse(); 
      document.getElementById("set_order").innerHTML=" ◄"; 
     } 
     else if (sortDescending == 2) { 
      vals = valss; 
      document.getElementById("set_order").innerHTML=" ▼"; 
     } 
     else { 
      vals.sort(compareText); 
      document.getElementById("set_order").innerHTML=" ▲"; 
     } 
     for (var i = 0, l = vals.length; i < l; i++) { 
      ul.appendChild(vals[i]); 
     } 
    } 
}); 

我添加所有在window.onloadfunction sortUnorderedList()得到valss值。

Example Here

0

这个问题是在Undo sort on sorted array in javascript其中一个很好的解决方案是将原始顺序存储到变量部分回答和每三次点击一次。

那里我会介绍一个变量i,您每次点击时都会附加一个变量。然后在每一次点击你有三个IFS:

if (i % 3 === 0) { 
    do first thing 
} else if (i % 3 === 1) { 
    do second thing 
else { 
    do third thing. 
} 

更新变量的每次点击保持机器轧%操作跟踪状态的动作。

为了得到0的第一个动作,你必须从零开始,并在添加前做出if。