静态的动态续篇之来点XML


Posted in Javascript onDecember 23, 2006

在搞定了基本的伪动态之后,我马上把它应用到了网站,但随后就发现了一个问题:我如何来管理新闻列表呢?要是让我在每次要加新闻时去修改源文件然后再上传我可是千万个不愿,不仅麻烦而且容易出错,懒人怎么能可以这么做。动动脑子,于是想到了用XML,这个早已存在,但近些年才流行起来的技术。

在HTML里,可以使用数据岛来使用XML数据,一个使用方法就是在HTML里加入一句:

<xml id="data">

    <!-- 在此为XML数据 -->

</xml>

这样,就可以在HTML里使用XML提供的数据。不过,这样还是显得麻烦了,还是要上传整个文件,那么用方便点的吧~~

<xml id="data" src="data.xml"/>

这样处理之后,我就可以只用修改一个XML文件然后上传到服务器了。

接下来,就是搞定在客户端对XML数据的处理了~~

首先,我得设计一个新闻的数据结构。这个简单,毕竟在列表时只需要用到新闻的标题和时间,但为了链接,需要加上一个ID,结果如下:

<newslist>

    <news>

        <id>1</id>

        <title>第一个新闻</title>

        <date>2005-11-16</date>

    </news>

</newslist>

数据结构搞定了,继续!

在客户端对数据处理当然首选JavaScript了,再么这篇文章讲的也是用JavaScript来实现伪动态。

在JS里,对数据岛的访问可以使用记录集:

var rs=data.recordset;

这个记录集的使用方法和ASP中类似,这下方便我了:),可以很方便地实现新闻的列表及链接了~在显示新闻,还需要显示的是上一条新闻的标题及下一条新闻的标题,而且显示新闻列表时,就不需要显示上一条及下一条新闻了。于是我放了两个层分别用来显示新闻和上一条及下一条新闻的信息,并在需要的时候设置是否显示。其中newsmain用来显示新闻或者新闻列表,newspage用来显示上一条及下一条新闻的信息。接着把对应ID的新闻存为网页文件,在显示时使用iframe嵌入。

先写个函数来从网址中获取新闻ID,这个在前一篇文章已经讲过,拿来用~~

function getid() {

    var str,len,pos,id,fn;     // 定义一些变量

    str=top.window.location.href;    //获取当然文件地址

    len=str.length;     // 得到地址长度

    pos=str.indexOf("?id=",0);   // 得到"?id="的起始地址

    // 判断是否存在"?id="

    if(pos>0) {

        id=str.substring(pos+4,len);   // 获取ID

        return eval(id);  // 返回数值类型的ID,方便处理

    }

    else {

        return 0;  // 错误参数,返回0,显示新闻列表

    }

}

再来个函数处理进入页面时执行什么动作,是显示新闻列表还是显示相应ID的新闻

function showmain() {

    var id;

    id=getid();  // 获取新闻ID

    // 是 0 则显示列表

    if(id>0) {

        rs.absoluteposition=id;  // 设置游标到指定的新闻

        shownews(id); // 显示新闻

    }

    else {

        showlist();   // 显示新闻列表

    }

}

显示新闻列表的函数

function showlist() {

    var ss="";  // HTML

    var i;  // 循环计数器

    rs.movefirst();  // 移动到第一个记录

    // 循环读取新闻记录

    for(i=0;i<rs.recordcount;i++) {

        ss=ss+"<font color=#800000>·</font><a href='javascript:shownews("+rs("id")+")'>"+rs("title")+"</a> ("+rs("date")+")<br/>";  // 添加一个新闻

        rs.movenext();  //移动到下一条一新闻

    }

    document.all.newsmain.innerHTML=ss;  //在新闻显示区输出新闻

    document.all.newspage.style.visibility="hidden";  // 显示新闻列表时,不显示前后新闻的信息

}

显示指定的新闻,并显示前后新闻的信息

function shownews(id) {

    var ps;  // 用于存放前后新闻的信息

    document.all.newsmain.innerHTML="<iframe class='news_main' frameborder='0' src='news/"+id+".htm'/>";  // 用iframe来显示新闻

    document.all.newspage.style.visibility="visible";  // 使前后新闻信息可见

    rs.absoluteposition=id;  // 将记录游标移动到当前新闻

    // 如果ID小于1说明是第一条记录,上一篇新闻就是“没有了”:)

    if(id<=1) {

        ps="上一篇:没有了";

    }

    // 否则就显示上一篇新闻的标题

    else {

        rs.moveprevious();  // 记录游标向前移动

        ps="<a href='javascript:shownews("+(id-1)+")'>上一篇:"+rs("title")+"</a>";  // 显示前篇新闻信息

        rs.movenext();  // 恢复记录游标

    }

    ps=ps+" ";  // 在两个信息之间插入一个空格

    // 如果ID大于记录总数说明这是最后一个新闻了~

    if(id>=rs.recordcount) {

        ps=ps+"下一篇:没有了";

    }

    // 否则显示下篇新闻的标题

    else {

        rs.movenext();  // 记录游标向前移动

        ps=ps+"<a href='javascript:shownews("+(id+1)+")'>下一篇:"+rs("title")+"</a>";  // 显示下篇新闻的标题

        rs.moveprevious();  // 恢复记录游标

    }

    document.all.newspage.innerHTML=ps;  // 显示前后新闻标题~

}

好了,到底算是基本完工了~具体使用可以这样来:

在head区加入XML数据岛

<head><xml id="data" src="newslist.xml"/></head>

接着在body的onload事件里执行showmain()

<body onload="showmain()">

还需要在body里加入两个层用于显示信息

<div id="newspage"></div>

<div id="newsmain"></div>

完工!

不过,我所用的方法也有不完善的地方,如新闻列表的ID必须保证顺序排列且不能有缺漏,因为在使用记录集时用到了绝对定位,还有其他等等。我写文章比较烂,所以:欢迎指正批评^-^!也欢迎大家我交流经验心得等,我的mail是vipxjw@tom.com。

Javascript 相关文章推荐
Jquery Ajax.ashx 高效分页实现代码
Oct 20 Javascript
使用jQuery清空file文件域的解决方案
Apr 12 Javascript
JQuery表格内容过滤的实现方法
Jul 05 Javascript
详细分析JavaScript变量类型
Jul 08 Javascript
javascript中使用正则表达式清理table样式的代码
Apr 01 Javascript
原生js编写基于面向对象的分页组件
Dec 05 Javascript
基于JavaScript定位当前的地理位置
Apr 11 Javascript
浅谈vue+webpack项目调试方法步骤
Sep 11 Javascript
基于JavaScript canvas绘制贝塞尔曲线
Dec 25 Javascript
el-select 下拉框多选实现全选的实现
Aug 02 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
Sep 17 Javascript
JavaScript实现旋转木马轮播图
Mar 16 Javascript
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
Dec 23 #Javascript
脚本吧 - 幻宇工作室用到js,超强推荐share.js
Dec 23 #Javascript
脚本吧 - 幻宇工作室用到js,超强推荐base.js
Dec 23 #Javascript
实现复选框全选/全不选切换
Dec 23 #Javascript
Javascript实例教程(19) 使用HoTMetal(7)
Dec 23 #Javascript
Javascript实例教程(19) 使用HoTMetal(6)
Dec 23 #Javascript
Javascript实例教程(19) 使用HoTMetal(5)
Dec 23 #Javascript
You might like
实用函数2
2007/11/08 PHP
php 搜索框提示(自动完成)实例代码
2012/02/05 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
2019/04/30 PHP
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
原生JS实现跑马灯效果
2017/02/20 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
解决ztree搜索中多级菜单展示不全问题
2017/07/05 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
mocha的时序规则讲解
2019/02/16 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
python 删除非空文件夹的实例
2018/04/26 Python
pandas数据清洗,排序,索引设置,数据选取方法
2018/05/18 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
解决Python一行输出不显示的问题
2018/12/03 Python
Python通过getattr函数获取对象的属性值
2020/10/16 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
中药专业毕业自荐书范文
2014/02/08 职场文书
电子装配专业毕业生求职信
2014/04/23 职场文书
春游踏青活动方案
2014/08/14 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
2014年残联工作总结
2014/11/21 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang