如何获取javascript用于排序列表与所有浏览器中的链接?

时间:2013-08-14 07:55:34

标签: javascript list sorting browser

所以这是我用链接排序列表(按字母顺序排列)的javascript:

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]);
   }
  }

 <div id="test"> <a href="#">Sort List</a>

  </div>
 <ul id="list">
  <li><a href="www.tumblr.com/post/9080">apple</a></li>
  <li><a href="www.tumblr.com/post/2378">pie</a></li>
  <li><a href="www.tumblr.com/post/5627">banana</a></li>

  </ul>

现在这个脚本在safari中运行得很好,但是在firefox中,它不起作用..如何在所有浏览器中使用它?

2 个答案:

答案 0 :(得分:2)

您必须使用textContent代替innerTextinnerText将在Firefox中返回undefined

w3.org textContent

<强>演示 Try before buy

答案 1 :(得分:0)

Firefox中存在的问题可能是由于文档对象模型(DOM)在执行JavaScript时尚未就绪并且可用。不同的浏览器以不同的方式处理事物,并且在执行脚本时就是其中之一。

您需要做的是:

  1. 将代码包装在函数中
  2. 在页面(DOM)准备就绪时执行该功能
  3. 您可以使用它来检测页面加载的时间:

    var readyStateCheckInterval = setInterval(function() {
        if (document.readyState === "complete") {
            init(); // This is the function that would contain your code.
            clearInterval(readyStateCheckInterval);
        }
    }, 10);