六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 117|回复: 0

JS 列表筛选、排序

[复制链接]

升级  39.33%

31

主题

31

主题

31

主题

秀才

Rank: 2

积分
109
 楼主| 发表于 2013-2-7 19:57:34 | 显示全部楼层 |阅读模式
<!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>
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表