`
ayue222
  • 浏览: 48307 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JS 列表筛选、排序

阅读更多
<!doctype html public "-//W3C//DTD HTML 4.01//EN' 'http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>排序</title>
<style type="text/css">
body{font-size:12px;margin:0;padding:0;}
.clearfix{zoom:0;}
.clearfix:after{content:'.';display:block;visibility:hidden;clear:both;height:0px;}
#mysort{width:80%;float:left;margin:10px;}
.select,.list{background:#fff;width:100%;margin:0;padding:0;}
.select li{list-style:none;width:100%;border-bottom:1px dashed #999;padding:8px 2px;float:left;}
.select li em{float:left;display:block;font-style:normal;padding:2px 5px;margin:5px 2px;}
.select li a{float:left;display:block;padding:2px 5px;background:#fff;color:#000;cursor:pointer;margin:5px 0 5px 5px;}
.select li a.on{background:#B13333;color:#fff;}
.list li{list-style:none;width:100%;padding:10px;float:left;}
.title{float:left;width:70%;padding-left:10px;}
.datetime{float:left;}
.sort{cursor:pointer;}
.dl{float:left;width:100%;padding:8px 2px;background:#ccc;}
</style>
</head>
<body>
<div id="mysort">
	<ul class="select">
		<li id="region"><a>所有</a><em>:</em><a>主院</a><a>别院</a><a>城市</a></li>
		<li id="mode"><a>所有</a><em>:</em><a>发表</a><a>回复</a></li>
	</ul>
	<div class="dl"><div class="title">主题</div><div class="datetime">时间 <a class="sort">↓</a></div></div>
	<ul class="list"></ul>
</div>
</body>
<script type="text/javascript">
var bind = function(obj,func){
	return function(){
		func.apply(obj,arguments);
	};
};
var get=function(className, tag ,root) {
        if(arguments.length==1){
        	root = (arguments[0]) ? (typeof arguments[0]=="string")?document.getElementById(arguments[0]):arguments[0] : null || document;
        	return root;
        }
        root = (root) ? (typeof root=="string")?document.getElementById(root):root : null || document; 
        if (!root) {return [];}
        var nodes = [],elements = root.getElementsByTagName(tag);
        for (var i = 0, len = elements.length; i < len; ++i) {
        	if(elements[i].className==className||className=="*"){
                nodes[nodes.length] = elements[i];
            }
        }
        return nodes;
}
var addEventHandler=function(obj, type, func) {
		if(!obj){return;}
		var doOn=function(o){
			if(o.addEventListener){o.addEventListener(type, func, false);}
			else if(o.attachEvent){o.attachEvent("on" + type, func);}
			else{o["on" + type] = func;}
		}
		var IsArray=function(v){ 
			try{ 
				var a = v[0]; 
				return typeof(a) != "undefined"; 
			}catch(e){ 
				return false; 
			} 
		}
		if(obj.tagName!='SELECT'&&IsArray(obj)){
			for(var i=0,oLen=obj.length;i<oLen;i++){
				doOn(obj[i],type.func);
			}
		}else{
			doOn(obj);
		}
};
var mySort=function(id){
	this.select=get('select','ul',id)[0];
	this.table=get('list','ul',id)[0];
	this.list=get('*','a',this.select);
	this.sort=get('sort','a',id)[0];
	this.format=function(arr,type,keys){
	    switch (type){ 
	      case 0:return arr.sort(function(a,b){a=(keys)?(a[keys])?a[keys]:a:a;b=(keys)?(b[keys])?b[keys]:b:b; return a>b?-1:(a>b)?0:1; }); break; 
	      case 1:return arr.sort(function(a,b){a=(keys)?(a[keys])?a[keys]:a:a;b=(keys)?(b[keys])?b[keys]:b:b; return a<b?-1:(a<b)?0:1; }); break; 
	      default:return arr.sort(function(a,b){a=(keys)?(a[keys])?a[keys]:a:a;b=(keys)?(b[keys])?b[keys]:b:b; return a>b?-1:(a>b)?0:1; }); break; 
	     }
	}
	this.getEvent=function(e){
		var event=e||window.event;
		if(event){return event.srcElement||event.target;}
	};
	return this;
}
mySort.prototype = {
	create:function(node){
		var oFrag=document.createDocumentFragment(),dTime,dTitle,dLi;
		for(var i=0,nLen=node.length;i<nLen;i++){
			dTime=document.createElement('div');
			dTime.className='datetime';
			dTime.innerHTML=node[i].datetime;
			dTitle=document.createElement('div');
			dTitle.className='title';
			dTitle.innerHTML=node[i].title;
			dLi=document.createElement('li');
			dLi.appendChild(dTitle);
			dLi.appendChild(dTime);
			oFrag.appendChild(dLi);
			dTime=dTitle=dLi=null;
		}
		this.table.innerHTML='';
		this.table.appendChild(oFrag);
		oFrag=dTime=null;
	},
	FullData:function(){
		var data=[{"region":"主院","title":1,"datetime":"2009-08-10 10:23:35","mode":"发表"},
	   {"region":"城市","title":4,"datetime":"2009-08-10 10:23:32","mode":"发表"},
	   {"region":"别院","title":3,"datetime":"2009-08-10 10:23:33","mode":"回复"},
	   {"region":"主院","title":2,"datetime":"2009-08-10 10:23:34","mode":"发表"},
	   {"region":"城市","title":5,"datetime":"2009-08-10 10:23:31","mode":"回复"}
		];
		return data;
	},
	strip:function(newData,matchData,m){
		var tmpData=[];
		if(matchData.length>0&&matchData[0]!='所有'){
			for(var i=0,dlen=newData.length;i<dlen;i++){
				for(var j=0,rLen=matchData.length;j<rLen;j++){
					if(matchData[j].innerHTML==newData[i][m]||matchData[j].innerHTML=='所有'){
						tmpData.push(newData[i]);
					}
				}
			}
			newData=tmpData;
			tmpData=[];
		}
		return newData;
	},
	require:function(){
		var tmpData=[],
			region=get('on','a','region'),
			mod=get('on','a','mode');
		var _data=this.FullData(),nData,t;
		t=(this.sort.innerHTML=="↓")?0:1;
		nData=this.format(_data,t,'datetime');
		nData=this.strip(nData,region,'region');
		nData=this.strip(nData,mod,'mode');
		this.table.innerHTML='loading...';
		setTimeout(bind(this,function(){this.create(nData)}),1000);
	},
	order:function(e){
		var target=this.getEvent(e);
		target.innerHTML=(target.innerHTML=='↓')?'↑':'↓';
		this.require();
	},
	
	doLight:function(e){
		var target=this.getEvent(e);
		var inner=target.innerHTML,selAll=target.parentNode.getElementsByTagName('a');
		if(inner=='所有'){
			for(var i=0,olen=selAll.length;i<olen;i++){
				if(selAll[i].innerHTML==inner){selAll[i].className=(selAll[i].className=='')?'on':'';}
				else{selAll[i].className='';}
			}
		}else{
			if(selAll[0].className=='on'){selAll[0].className='';}
			target.className=(target.className=='')?'on':'';
		}
		this.require();
	},
	init:function(e){
		addEventHandler(window,'load',bind(this,this.require));
		addEventHandler(this.list,'click',bind(this,this.doLight));
		addEventHandler(this.sort,'click',bind(this,this.order));
	}
};
var sort=new mySort('mysort').init();
</script>
</html>
2
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics