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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值