我无法理解“排序功能”

时间:2011-04-21 06:30:48

标签: javascript function

这个问题对你来说可能很容易..但我是javascript新手

我无法理解这部分功能

  

kids.sort(function(n,m)

什么n和m ?? 以及我如何理解这种功能

thsnks

<script>
function sortkids(e) {
     if (typeof e == "string") e = document.getElementById(e);
     var kids = [];
     for(var x = e.firstChild; x != null; x = x.nextSibling)
         if (x.nodeType == 1) kids.push(x);
     kids.sort(function(n, m) { 
                   var s = n.firstChild.data; 
                   var t = m.firstChild.data;
                   if (s < t) return -1;    
                   else if (s > t) return 1;  
                   else return 0;           
               });

     for(var i = 0; i < kids.length; i++) e.appendChild(kids[i]);
}
</script>
<ul id="list"> 
<li>one<li>two<li>three<li>four <!-- items are not in alphabetical order -->
</ul>
<button onclick="sortkids('list')">Sort list</button>

2 个答案:

答案 0 :(得分:3)

.sort正在为您进行实际排序,即数组内部项目的混乱。您需要告诉.sort 您希望项目排序的方式。你这样做是通过提供一个带有两个参数的函数并返回两个你认为“更大”或“更小”的信息,或两者是否相等(返回值-101)。

.sort遍历数组,一次将两个元素传递到函数中,询问“哪一个更大?”,根据答案对数组进行排序。它会重复执行此操作,直到对数组进行排序。

答案 1 :(得分:1)

nm将是数组中的元素。该函数将被重复调用,并使用不同的数组元素进行比较,并且应该返回一个值,表示n是否小于,大于或等于m。这使得sort可以完成排序数组的工作,即使sort对元素一无所知。所有它需要知道,它来自你传递的功能。

该代码正在做的是将DOM元素放入一个数组中,然后对其进行排序,这只会对数组中的元素进行排序,而不是在DOM中。那么最后一点,进行e.appendChild调用,就是采用排序数组并移动DOM中的元素,使它们位于正确的位置。 (这是有效的,因为当你使用已经在其他地方的DOM中的元素调用appendChild时,它会被移动;并且appendChild总是会附加到最后。)