zoukankan      html  css  js  c++  java
  • 白菜世纪RSS无刷新聚合器(1221修正)
    声明:下面的所做的修改只是为了与“剑心通明”共同学习这个程序,并无修改原文代码的意思。

    我把原来代码中,无关核心的部分做了注释。这样,看代码就容易了。如下:
    =================================================
    <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>

  • 相关阅读:
    PasswordHasher 算法
    Java的环境变量配置
    CSS2+DIV的学习心得
    struts2利用token机制拦截用户重复提交
    电脑开机出现 error: no such partition grub rescue
    MySQL limit实际用法的详细解析
    win7将硬盘由ATA修改为AHCI的方法
    与SVN相关的程序的调试问题【转】
    【转】JSP提交表单
    LigerUI 快速开发UI框架 链接
  • 原文地址:https://www.cnblogs.com/winner/p/591564.html
Copyright © 2011-2022 走看看