声明:下面的所做的修改只是为了与“剑心通明”共同学习这个程序,并无修改原文代码的意思。
我把原来代码中,无关核心的部分做了注释。这样,看代码就容易了。如下:
=================================================
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>白菜世纪-RSS无刷新聚合器(1221修正)</title>
<script language="JavaScript" type="text/javascript">
<!--
//加载变灰
function listen(a){
// document.getElementById('prolist').className=a;
}
function btnSty(objId,objStyle)
{
// document.getElementById(objId).style.display = objStyle;
}
//提示窗口控制
function ifodis(){
// btnSty('loadifo','none');
}
function settime(a){
// setTimeout(a,1000);
}
function loadtime(){
// loadifo.innerHTML += "."
}
//以上几个函数可以全部删除;
//XML数据绑定
var xmldoc = false;
function loadrss(n){
// listen('mainbg2');
//生成随机数,同时限制刷新次数
var Num=Math.floor(Math.random()*100);
//定义往址参数
url = n+"?id="+Num;
//定义为异步传输模式
xmldoc = false;
//Mozill,Safari等浏览器时需要创建的XMLHttp类
if(window.XMLHttpRequest){
xmldoc = new XMLHttpRequest();
if(xmldoc.overrideMimeType){
xmldoc.overrideMimeType('text/xml');
}
}
//IE浏览器时创建的XMLHttp类
else if(window.ActiveXObject){
try{
xmldoc = new ActiveXObject("Msxml3.XMLHTTP");
}
catch(e){
try{
xmldoc = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
try{
xmldoc = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){}
}
}
}
//不能创建XMLHTTP类时返回
if(! xmldoc){
return false;
}
//调用CheckState函数
xmldoc.onreadystatechange = CheckState; //如果不检查状态,可以不要。
xmldoc.open('GET',url,true);
xmldoc.send(null);
}
//状态检测
function CheckState(){
//这个函数检查连接服务器的状态,并在文本中间显示一个状态框
var response = xmldoc.responseXML.documentElement;
// btnSty('loadifo','block')
//收到完整的服务器响应
if(xmldoc.readyState == 1){
// loadifo.innerHTML = "连接服务器"
}
else if(xmldoc.readyState == 2){
// loadifo.innerHTML = "开始加载数据"
}
else if(xmldoc.readyState == 3){
// loadifo.innerHTML = "正在加载数据"
settime(loadtime)
}
else if(xmldoc.readyState == 4){
//HTTP服务器响应值成功
if(xmldoc.status == 200){
//将服务器返回的字符串写到页面中ID为showdiv的区域
//loadifo.innerHTML = "加载完成"
// settime(ifodis);
//调用NUM函数,原文作者写JS代码也喜欢丢分号,这里补上。^O^
num(response); //注意:通过调用NUM函数来显示文章列表
}
else{
// loadifo.innerHTML = "错误"+xmldoc.status+"点这里刷新";
}
}
}
//记录集总数
function num(b){
try{
var titleNode = b.selectNodes("//rss/channel/title");
var a = b.getElementsByTagName("item").length
// titleV = titleNode(0).firstChild.nodeValue;
// listnum.innerHTML = "共有"+a+"篇文章 来源于:"+titleV; //以上统计文章篇数
setlist(a,b); //调用显示函数。
}
catch(e){}
}
// if (top.location != self.location)top.location=self.location; //这是不被框架
//节目列表显示
//定义接收指向各个元素的节点信息的变量
var titleNode,linkNode,categoryNameNode,authorNode,pubDateNode,descriptionNode
//定义接收元素值的变量
var titleV,linkV,categoryNameV,authorV,pubDateV,descriptionV
//分类聚合
function setlist(a,b)
{
var prograNode = b.getElementsByTagName("item");
var adminlinkNode = b.selectNodes("//rss/channel/link");
var titleNode = b.selectNodes("//rss/channel/item/title");
var linkNode = b.selectNodes("//rss/channel/item/link");
var categoryNode = b.selectNodes("//rss/channel/item/category");
var authorNode = b.selectNodes("//rss/channel/item/author");
var pubDateNode = b.selectNodes("//rss/channel/item/pubDate");
var descriptionNode = b.selectNodes("//rss/channel/item/description");
var category2sNode = b.selectNodes("//rss/channel/item/dc:subject");
var author2sNode = b.selectNodes("//rss/channel/item/dc:creator");
var pubDate2sNode = b.selectNodes("//rss/channel/item/dc:date");
var listchar=""
//使用for循环,产生列表信息
for (i=0; i<a; i++)
{
//下面的代码,测试RSS的内容是否可用,不是必需的
try{titleV = titleNode(i).firstChild.nodeValue;}
catch(e){titleV = "没有可用信息"}
try{linkV = linkNode(i).firstChild.nodeValue;}
catch(e){linkV = "没有可用信息"}
try{categoryV = categoryNode(i).firstChild.nodeValue;}
catch(e){
try{categoryV = category2sNode(i).firstChild.nodeValue;}
catch(e){categoryV = "没有可用信息"}
}
try{authorV = authorNode(i).firstChild.nodeValue;}
catch(e){
try{authorV = author2sNode(i).firstChild.nodeValue;}
catch(e){authorV = "没有可用信息"}
}
try{pubDateV = pubDateNode(i).firstChild.nodeValue;}
catch(e){
try{pubDateV = pubDate2sNode(i).firstChild.nodeValue;}
catch(e){pubDateV = "没有可用信息"}
}
try{descriptionV = descriptionNode(i).firstChild.nodeValue;}
catch(e){descriptionV = "没有可用信息"}
//这里就是显示的形式了,用table 还是用 div 来显示,你自己看吧。
adminlinkV = adminlinkNode(0).firstChild.nodeValue;
//将得到的元素值装载到产生表格的字符串中
//每生成一行元素,在首单元格内添加函数showmore(),并将序列号作为参数传入
listchar += "<h5><a href='"+linkV+"' target='_blank'>"+titleV+"</a></h5><span>发表时间:"+pubDateV+"</span><div class='article'>"+descriptionV+"</div><div class='bottom'>文章分类:"+categoryV+" <a href='"+adminlinkV+"' target='_blank'>作者:"+authorV+"</a></div>";
}
//将生成的表格输出到页面的DIV元素
prolist.innerHTML = listchar; //注意这个语句,在id=prolist处插入一行
// listen('mainbg') ;//
}
// -->
</script>
<!--白菜JS2 以下到 "白菜修改核心算法End " 可以全部不要-->
<script language="JavaScript">
/*这个显示左边的菜单,不是必需的
<!--
if (document.images){
t_sub=new Image
tsub=new Image
tsub_e=new Image //t_sub_end.gif备用图片
t_plus=new Image
tplus=new Image
tplus_e=new Image
t_open=new Image
t_close=new Image
t_sub.src="images/t_sub.gif";
tsub.src="images/t_sub_begin.gif";
tsub_e.src="images/t_sub_end.gif"; //t_sub_end.gif备用图片
t_plus.src="images/t_plus.gif"
tplus.src="images/t_plus_begin.gif"
tplus_e.src="images/t_plus_end.gif"
t_open.src="images/open.gif"
t_close.src="images/close.gif"
}
*/
//白菜修改核心算法Begin
function showdiv(num)
{
/*菜单收、放,不是必需的
var imagename
var name
var total
if (document.all("subtree"+num).style.display=="none" )
{
document.all.item("subtree"+num).style.display=""
if(num<2)
{
document.all.item("image"+num).src=tsub.src
}
else{
document.all.item("image"+num).src=t_sub.src
}
document.all.item("img"+num).src=t_open.src
}
else
{
document.all.item("subtree"+num).style.display="none"
if(num>12)
{
document.all.item("image"+num).src=tplus_e.src
}
else if(num<2)
{
document.all.item("image"+num).src=tplus.src
}
else
{
document.all.item("image"+num).src=t_plus.src
}
document.all.item("img"+num).src=t_close.src
}
*/
}
//白菜修改核心算法End
//-->
</script>
</head>
<body onload="loadrss('http://rss.xinhuanet.com/rss/native.xml');">
<!--注意这里,由setlist ()函数中的显示方式决定,这里的ID被setlist()引用-->
<div class="body">
<!--di v class="main" id="main" 不是必须 -->
<!--di v class="maintit" id="listnum" > </ d iv 显示 统计数据--->
<!--di v class="nonetab"></div -->
<!--xm l i d="xml_file"></x ml -->
<div class="mainbg" id="prolist">
</div>
<!--/di v -->
</div>
</body>
</html>