一个简单的排序例子理解闭包作为参数

通过一个简单的排序例子理解Sort带参数的排序规则以及闭包作为参数执行计算。
下面是一段HTML内容:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script type="text/javascript">
//$each是一个迭代方法,它将遍历collection中的每一个元素,并将其作为参数执行闭包运算
  function $each(collection,closure)
  {
	var ret = [];//定义数组		
	for(var i = 0;i<collection.length;i++)
	{ //将执行闭包运算后的结果加到数组集合中
	  ret.push(closure(collection[i]));
	}
	return ret;
  }
  //对Table进行排序	
  function SortTable(table,id)
  {
	var rows = $each(table.rows,function(x){return x;});
	if(id == "Asc")//判断点击了升序
	{
       //带闭包参数的排序方法,可以控制升序还是降序。
	  rows.sort(function(a,b){
	  if(a.childNodes[0].innerText - 0 > b.childNodes[0].innerText - 0)
	    {
		  return 1;
	    }
	  else
	    return -1;
	  });
     }
	else if(id == "Desc")
	{
	  rows.sort(function(a,b){
	  if(a.childNodes[0].innerText - 0 > b.childNodes[0].innerText - 0)
	  {
		return -1;
	  }
	  else
		return 1;
	  });
	}
	//将排序后的rows添加到table中	
	$each(rows,function(x){
	  x.parentElement.appendChild(x);
	  return x;
	});
	}

</script>
</head>
<body>
<table id="mytable" style="border: medium solid #000000">
	<tr>
		<td>3</td>
		<td>Hello World</td>
	</tr>
	<tr>
		<td>0</td>
		<td>Will</td>
	</tr>
	<tr>
		<td>2</td>
		<td>Pan</td>
	</tr>
	<tr>
		<td>1</td>
		<td>Tian Tian Xiang Shang</td>
	</tr>
	<tr>
		<td>4</td>
		<td>Hao Hao Xue xi</td>
	</tr>
</table>
<div>
  <button id="Asc" onclick="SortTable(mytable,'Asc')">Sort By ASC</button>  <button id="Desc" onclick="SortTable(mytable,'Desc')">Sort By Desc</button>
</div>
</body>
</html>
 
其上对应的输出图:

点击Sort By Asc后显示为:

 点击Sort By Desc后输出为:

posted @ 2011-06-09 23:34  WILLPAN  阅读(368)  评论(0编辑  收藏  举报