这个问题对你来说可能很容易..但我是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>
答案 0 :(得分:3)
.sort
正在为您进行实际排序,即数组内部项目的混乱。您需要告诉.sort
您希望项目排序的方式。你这样做是通过提供一个带有两个参数的函数并返回两个你认为“更大”或“更小”的信息,或两者是否相等(返回值-1
,0
和1
)。
.sort
遍历数组,一次将两个元素传递到函数中,询问“哪一个更大?”,根据答案对数组进行排序。它会重复执行此操作,直到对数组进行排序。
答案 1 :(得分:1)
n
和m
将是数组中的元素。该函数将被重复调用,并使用不同的数组元素进行比较,并且应该返回一个值,表示n
是否小于,大于或等于m
。这使得sort
可以完成排序数组的工作,即使sort
对元素一无所知。所有它需要知道,它来自你传递的功能。
该代码正在做的是将DOM元素放入一个数组中,然后对其进行排序,这只会对数组中的元素进行排序,而不是在DOM中。那么最后一点,进行e.appendChild
调用,就是采用排序数组并移动DOM中的元素,使它们位于正确的位置。 (这是有效的,因为当你使用已经在其他地方的DOM中的元素调用appendChild
时,它会被移动;并且appendChild
总是会附加到最后。)