• 【设为首页】
  • 【收藏闪客居】
当前位置:主页>AS 应用>文章内容
  • FLASH里做新闻信息列表按日期,按标题排序,以及关键字搜索(as2.0)
  • 来源:blueidea.com 作者:moyu0921 2008-05-10 【

最近做到一个项目有用到,以前做新闻信息排序跟关键字搜索都是由后台完成,然后生成XML,FLASH再去读,这样由FLASH去LOAD后台程序页面,后台又要去访问数据库,然后排好输出,FLASH等排好了再去读,但是客户要求是苛刻的,他说这样速度上慢很多,要求一定要在FLASH里直接完成,累得我跑来经典请教了各位大虾,最后还是搞定了.大难不死啊
我把我大概的做法贴出来,大家一起交流下,看还有没更好的办法实现
成品浏览:http://www.an-ye.cn/Search
XML地址为:http://www.an-ye.cn/Search/xml/xml_1.xml
首先是日期排序
我的做法是用sortOn来排,因为sortOn可以按数组中的某种属性来排序
所以我们只要给每个数组元素定义它属性 以及把相应数字赋值给它 这样就可以通过sortOn来排出日期大小的信息了
但是单独的日期是不能直接比较大小的(可能有方法可以比,但是我不知道),所以我是用先比较年,然后比较月,最后比较日的方法做的
然后日期最大的,例如上面的数组有5个元素,每个轮流跟其他4个数组元素比较一下,如果最大的是大于其他4个,那么变量dateNum就
dateNum++四次,然后把值赋给这个数组元素DateDataArr[k].Value=dateNum;最后每个数组元素都会得到一个单独的数字
最后我们就可以用DateDataArr.sortOn("Value",2|16);来把这些数组按Value这个元素从大到小或者小到大排列了
具体代码如下,把代码粘贴放到第一帧就输出就可以看到排序效果了:

复制内容到剪贴板
代码:
var DateDataArr:Array=["2008-01-02","2008-05-20","2008-03-13","2008-01-10","2007-01-09"];
for(k=0;k<DateDataArr.length;k++){
    var dateNum=0;            
    for(j=0;j<DateDataArr.length;j++){
        var YearN=Number(DateDataArr[k].split("-")[0]);
        var MonthN=Number(DateDataArr[k].split("-")[1]);
        var dayN=Number(DateDataArr[k].split("-")[2]);
        var YearNN=Number(DateDataArr[j].split("-")[0]);
        var MonthNN=Number(DateDataArr[j].split("-")[1]);
        var dayNN=Number(DateDataArr[j].split("-")[2]);
        if(YearN>YearNN){
            dateNum++;
        }else if(YearN==YearNN){
            if(MonthN>MonthNN){
                dateNum++;
            }else if(MonthN==MonthNN){
                if(dayN>dayNN){
                    dateNum++;
                }
            }
        }
    }
    DateDataArr[k].Value=dateNum;
}
//按日期正排序
DateDataArr.sortOn("Value",2|16);
//按日期逆排序
//DateDataArr.sortOn("ValueN",1|16);
trace(DateDataArr);
然后是按标题排
按标题比较简单些,直接sort排序就搞定了HOHO
复制内容到剪贴板
代码:
var tiTlelDataArr:Array=["ccc","bbb","zzz","222","111"];
//按标题正排序
tiTlelDataArr.sort();
//按标题倒排序
//tiTlelDataArr.sort(2);
trace(tiTlelDataArr);

其次是关键字搜索
首先在场景上做一按钮实例名为btn,一个输入文本实例名为SearchTxt
因为FLASH里提供了indexOf搜索函数(这里感谢下flash023斑竹的提示),indexOf是查询数组用,如果有查到有相关的内容数组.indexOf(SearchTxt.text)的值会为0,否则为-1;
所以我们要新建一个新的空数组SearchArr,用来组合所有符合关键字的内容,每搜索到一条符合的内容便push上去,而最后SearchArr这个数组便是我们所搜索出来的东西.
具体代码如下:
复制内容到剪贴板
代码:
var dataArr:Array=["ccc","bbb","zzz","aaa","aa"];
btn.onRelease=function(){
    var SearchArr:Array=new Array();
    if(SearchTxt.text!=""){
        for(j=0;j<dataArr.length;j++){
            if(dataArr[j].indexOf(SearchTxt.text)!=(-1)){
                SearchArr.push(dataArr[j]);
            }
        }
        if(SearchArr.length==0){
            trace("没有相关信息");
        }else{
            trace(SearchArr);
        }
    }
}



上一篇:利用Matrix与BitMapData类构造镜面涂抹效果(as2.0)   下一篇:使用CSS层级式样式表格式化文本(as2.0)
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)