0

所以这是我用链接对列表(按字母顺序)进行排序的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 中,它不起作用..如何在所有浏览器中得到这个工作?

4

2 回答 2

2

您必须使用textContent而不是innerText. innerTextundefined在 Firefox 中返回。

w3.org textContent

购买 前试用

于 2013-08-14T08:05:36.713 回答
0

您在 Firefox 中遇到的问题可能是由于执行 JavaScript 时文档对象模型 (DOM) 尚未准备好和可用。不同的浏览器处理事情的方式不同,执行脚本的时间就是其中之一。

您需要做的是:

  1. 将代码包装在一个函数中
  2. 当页面(DOM)准备好时执行该函数

您可以使用它来检测页面何时加载:

var readyStateCheckInterval = setInterval(function() {
    if (document.readyState === "complete") {
        init(); // This is the function that would contain your code.
        clearInterval(readyStateCheckInterval);
    }
}, 10);
于 2013-08-14T08:03:36.420 回答