2016-01-01 119 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。