2015-11-10 34 views
-2

此功能组织列表,不按字母顺序排列:在Firefox和Internet Explorer中升序/降序。 在谷歌铬和边缘工作。功能组织列表在Firefox中不工作

这里是代码:

<script type="text/javascript"> 

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

function compareText(a1, a2) { 
    var t1 = a1.innerText, 
     t2 = a2.innerText; 
    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]); 
    } 

    vals.sort(compareText); 

    if (sortDescending) { 
     vals.reverse(); 
    } 

    ul.innerHTML = ''; 
    for (var i = 0, l = vals.length; i < l; i++) { 
     ul.appendChild(vals[i]); 
    } 
} 

</script> 
+0

似乎有什么不奏效?控制台中是否有错误?它运行但不符合你的期望? – AtheistP3ace

+0

你确定点击处理程序不工作吗?也许你的过滤器有问题? –

+1

根据这个小提琴工作正常:http://jsfiddle.net/t1pm81sg/它不工作?任何例外?或者处理程序没有被解雇?你有没有在你的处理程序的开始处添加一个'console.log()',然后再运行其他代码来查看它是否真的被触发了? – ste2425

回答

0

试试这个:

document.getElementById("hello").onclick = talk; 
 
function talk() 
 
{ 
 
    alert('It works!'); 
 
}
<a id="hello">Click me!</a>

0

这似乎是正确的。你的元素ID是否正确?检查是否有多个使用相同ID的元素。如果可以的话,发布你的HTML代码。

+0

我把代码不工作。 – jmsmarcelo

0

如果您使用来源不明的代码,这是不好的,你甚至可能得到的与著作权麻烦了!这里有一个简化版本(不,我不会为使用Bubble-sort而道歉),应该很容易遵循。

编辑在OP的请求。如果你认为的顺序是错的,你发现了什么“词汇顺序”,其实就是增加深度复制

<!DOCTYPE html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
<script type="text/javascript"> 
// as shown in http://stackoverflow.com/questions/3066427/copy-all-childnodes-to-an-other-element-in-javascript-native-way 
function copyElements (dst,src){ 
    while (src.hasChildNodes()) { 
    dst.appendChild(src.removeChild(src.firstChild)) 
    } 
} 

function sortUnorderedList(element_id, direction){ 
    var table = document.getElementById(element_id); 
    var rows,i,tmp; 

    // get the rows in the order as they are 
    rows = table.rows; 
    i = rows.length - 1; 

    // tmp must be a node for this highly simplified stuff to work 
    tmp = document.createElement("getoffmylawn"); 

    // do a simple Bubble sort (sorts lexically, maybe not what you want!) 
    // Assumes things to sort are in the first cell, adjust if necessary 
    for(; i > 0; i--){ 
    for(j = 0;j < i; j++){ 
     if(direction === false){ 
     if(rows[j].firstChild.firstChild.textContent < rows[j+1].firstChild.firstChild.textContent){ 
      copyElements (tmp , rows[j]); 
      copyElements (rows[j] , rows[j+1]); 
      copyElements (rows[j+1] , tmp); 
     } 
     } 
     else{ 
     if(rows[j].firstChild.firstChild.textContent > rows[j+1].firstChild.firstChild.textContent){ 
      copyElements (tmp , rows[j]); 
      copyElements (rows[j] , rows[j+1]); 
      copyElements (rows[j+1] , tmp); 
     }  
     } 
    } 
    } 

} 

window.onload = function() { 
    var desc = false; 
    document.getElementById("Order").onclick = function() { 
     sortUnorderedList("FileList", desc); 
     desc = !desc; 
     return false; 
    }; 
}; 
</script> 
</head> 
<body> 
<table id="FileList"> 
<tr><td><a href="a">Foo</a></td></tr> 
<tr><td><a href="b">Bar</a></td></tr> 
<tr><td><a href="c">Foobar</a></td></tr> 
<tr><td><a href="d">Something</a></td></tr> 
<tr><td><a href="e">Anything</a></td></tr> 
<tr><td><a href="f">Somehwere</a></td></tr> 
<tr><td><a href="g">elsewhere</a></td></tr> 
<tr><td><a href="h">completely lost</a></td></tr> 
</table> 
<button id="Order">Sort</button> 
</body> 
</html> 

的例子。

+0

谢谢。由于列表是由另一个命令生成的,因此不起作用。 – jmsmarcelo

+0

列表是否由另一个命令生成并不重要。唯一的区别是我使用了一张表格而不是你的无序列表。就这样。只要用'table.getElementsByTagName(“li”)''交换'table.rows',从'table'和'li'中取出'ul'就行了。奇迹般有效。如果它仍然不起作用,你必须发布一个完整的HTML文件,减少到错误发生的地方。否则,我们必须等待我的水晶球从其二百年的维护和抛光中恢复过来。 – deamentiaemundi

+0

谢谢,正在工作。对不起,因为我对编程了解不多,所以我在编辑我的博客。 – jmsmarcelo

0

在Internet Explorer和Firefox的工作,我代替:

innerTexttextContent