• GNineBox的2.1版本,支持Opera。

    /* =================== GNineBox v2.1 ===============================
    GNineBox("jgClass")
    GNineBox("类名")

    功能说明:
    GNineBox是一个生成九宫格的程序。也可用于制作圆角。

    版本更新历史:
    v2.1:支持Opera。
    v2.0:可通过CSS样式定义九宫格外框样式,实现表现跟内容分离。
    (已知问题:不支持Opera)

    版权信息:
    本程序是自由程序,使用请保留本标注。

    作者信息:
    Ghost Zhang
    Email:lovej1bz@gmail.com
    QQ:22168741
    ORG:www.WebReBuild.ORG www.CSSForest.ORG
    Blog:http://forest.blogbus.com

    使用说明:
    只需要通过CSS样式定义要应该九宫格的class类的公共图片名称即可。
    例:
    定义样式:.gnb{background:url("gn.gif");}或
    .gnb{background-image:url("gn.gif");}
    只需要给出图片名称前面的公共名即可,如图片名分别为“gn_tl.gif”、
    “gn_tm.gif”、“gn_tr.gif”,只要imgName定义为“gn”。
    在页面最下面加入:<script type="text/javascript">GNineBox("GNB");</script>

    GNineBox的样式的定义优先级如下:
    标签级样式,如:<div class="gnb" style="background-image:url(gn.gif)">...</div>
    文件级样式,如:<style type="text/css">.gnb{background-image:url(gn.gif)} </style>
    外联样式,如:<link rel="stylesheet" rev="stylesheet" href="style.css" type="text/css" media="screen" />

    没有层级的关系,即.top .gnb{background-image:url(gn.gif)}与.gnb{background-image:url(gn.gif)}是相等的。
    在文件级样式或外联样式中,最后的定义会被使用,即:
    如果同时定义了.top .gnb{background-image:url(gn.gif)}和.gnb{background-image:url(gn2.gif)}
    那么.gnb{background-image:url(gn2.gif)}会被应用。

    注意:FireFox跟Opera对路径中的空格必须解析为%20。
    如果background的image路径中出现空格,请将其改为%20,以确保路径能被正确读取。
    如:
    background-image:url(http://www.cssforest.org/trys/gninebox 2.0/bg.gif);
    应该写为:
    background-image:url(http://www.cssforest.org/trys/gninebox%202.0/bg.gif);
    ========================================================================*/

    GNineBox 2.1Demo

    下载GNineBox v2.1

  • GNineBox v2.0终于发布啦,这个版本实现了表现跟内容分离,通过CSS的定义,即可改变九宫格的外框表现。谢谢在制作过程中给于帮助的和意见的各位朋友。特别鸣谢PJ的CSSDome。

    /* =============== GNineBox v2.0 ==========
    GNineBox("jgClass")
    GNineBox("类名")

    功能说明:
    GNineBox是一个生成九宫格的程序。也可用于制作圆角。

    版本更新历史:
    v2.0:可通过CSS样式定义九宫格外框样式,实现表现跟内容分离。
    (已知问题:不支持Opera)

    版权信息:
    本程序是自由程序,使用请保留本标注。

    作者信息:
    Ghost Zhang
    Email:lovej1bz@gmail.com
    QQ:22168741
    ORG:www.WebReBuild.ORG www.CSSForest.ORG
    Blog:http://forest.blogbus.com

    使用说明:
    只需要通过CSS样式定义要应该九宫格的class类的公共图片名称即可。
    例:
    定义样式:.gnb{background:url("gn.gif");}或
    .GNB{background-image:url("gn.gif");}
    只需要给出图片名称前面的公共名即可,如图片名分别为“gn_tl.gif”、
    “gn_tm.gif”、“gn_tr.gif”,只要imgName定义为“gn”。
    在页面最下面加入:<script type="text/javascript">GNineBox("GNB");</script>

    GNineBox的样式的定义优先级如下:
    标签级样式,如:<div class="gnb" style="background-image:url(gn.gif)">...</div>
    文件级样式,如:<style type="text/css">.gnb{background-image:url(gn.gif)} </style>
    外联样式,如:<link rel="stylesheet" rev="stylesheet" href="style.css" type="text/css" media="screen" />

    没有层级的关系,即.top .gnb{background-image:url(gn.gif)}与.gnb{background-image:url(gn.gif)}是相等的。
    在文件级样式或外联样式中,最后的定义会被使用,即:
    如果同时定义了.top .gnb{background-image:url(gn.gif)}和.gnb{background-image:url(gn2.gif)}
    那么.gnb{background-image:url(gn2.gif)}会被应用。
    ==================================================*/


    GNineBox 2.0Demo

    下载GNineBox v2.0

  • 也许你使用过我之前写的《[原]用DIV做九宫格》中的方法制作九宫格,不知你有没觉得,当要做几个不同样式的九宫格时,样式文件得COPY几份,间隔之类的得重新设置,会比较麻烦。懒人有懒福啦,自己写了个九宫格的脚本,用来生成九宫格,这样就不用去动那个慢慢变大的样式表啦。

    ============================GNineBox v1.0============================
     GNineBox("JgId","JgWidth","JgHeight","JgImgPath","imgName","imgType")
     GNineBox("对象","宽度","高度","图片路径","图片名","图片类型")
     
     功能说明:
     GNineBox是一个生成九宫格的程序。也可用于制作圆角。目前是1.0版本。
     
     版权信息:
     本程序是自由程序,使用请保留本标注。
     
     作者信息:
     Ghost Zhang
     Email:lovej1bz@gmail.com
     QQ:22168741
     ORG:www.WebReBuild.ORG www.CSSForest.ORG
     Blog:http://forest.blogbus.com
     
     参数说明:
     JgWidth:可以定义1~6个数值,以“|”分隔。分别将应用于6个宽,即:上左、
         上右、下左、下右、中左、中右。
      一个值:应用于所有宽;
      二个值:应用于上左右、下左右,中间为默认值20px;
      三个值:应用于上左右、下左右、中左右;
      四个值:应用于上左、上右、下左、下右,中间为默认值20px;
      五个值:应用于上左、上右、下左、下右、中左右;
      六个值:应用于上左、上右、下左、下右、中左、中右。
     ----------------------
     JgHeight:可以定义1~2个数值,分别将应用于2个高,即:上、下。
      一个值:应用于上下;
      二个值:应用于上、下。
     ----------------------
     JgImgPath:设置图片路径。为空表示当前目录。
     ----------------------
     imgName:设置图片名称。为空表示于ID同名。
      只需要给出图片名称前面的公共名即可,如图片名分别为“gn_tl.gif”、
      “gn_tm.gif”、“gn_tr.gif”,只要imgName定义为“gn”。
     ----------------------
     imgType:设置图片类型。默认为“gif”。
     
     如:GNineBox("GNineBox","20px|23px|25px","25px","","box","gif")
     =====================================================================

    GNineBox Demo

    下载GNineBox v1.0

  • /*
    ========================
    函数:显示或隐藏层
    showDiv(divId_array,showLocality_array)
    参数说明:
    divId_array 所有要操作的层ID,用逗号分隔
    showLocality_array 所有要显示的层在参数DivIdArray所对应的位置。为“0”或空时全部显示,设为负数则全部隐藏。
    例如:showDiv('div3,div1,div2','2,3')为显示第二个(div1)和第三个层(div2),第一个层(div3)将被隐藏。
    ========================
    */
    function showDiv(divId_array,showLocality_array)
    {
     var div_array = new Array();
     var locality_array = new Array();
     var intLocality;//showLocality_array数组长度
     var intDiv;//div_array 数组长度
     var intTemp = 1;//临时变量
     var intTmp = 1;//临时变量
     
     //初始化
     if (divId_array)
     {
      div_array = divId_array.split(",");
     }else{
      intDiv = 0;
     }
     if (showLocality_array)
     {
      locality_array = showLocality_array.split(",");
      intLocality = locality_array.length;

      for (var n = 0;n < intLocality;n++)
      {
       intTemp *= locality_array[n];
       
      }
      if (intTemp <= 0)
      {
       intLocality = intTemp;
      }else{
       intLocality = div_array.length;

      while (intLocality > 0)
      {
       intLocality -= 1;
       document.getElementById(""+ div_array[intLocality] +"").style.display = "none";
      }
       intLocality = 1;
      }
     }else{
      intLocality = 0;
     }

     //显示指定层
     if (intDiv != 0 && intLocality >0)
     {
      intDiv = div_array.length;
      intLocality = locality_array.length;
      
      //排序locality_array 数组
      for (var n = 0;n < intLocality;n++)
      {
       intTemp = locality_array[n];
       
       for (var m = n + 1;m < intLocality;m++)
       {
        if (locality_array[n] > locality_array[m])
        {
         locality_array[n] = locality_array[m];
         locality_array[m] = intTemp;
         intTemp = locality_array[n];
        }
       }
      }
      
      intLocality = locality_array.length;
      intTemp = 0;
      
      //
      while (intTemp < intLocality)
      {
       if ((locality_array[intTemp] - 1) < div_array.length)
       {
        intTmp = locality_array[intTemp] - 1;
        document.getElementById(""+ div_array[intTmp] +"").style.display = "block";
       }
       
       intTemp += 1;
      }
     }
     else if(intLocality == 0)
     {//显示所有层
      intLocality = div_array.length;

      while (intLocality > 0)
      {
       intLocality -= 1;
       document.getElementById(""+ div_array[intLocality] +"").style.display = "block";
      }
     }else{//隐藏所有层
      intLocality = div_array.length;

      while (intLocality > 0)
      {
       intLocality -= 1;
       document.getElementById(""+ div_array[intLocality] +"").style.display = "none";
      }
     }
    }

  • 改了一下昨天的脚本,想要实现读取ASP文件的结果,主要是改了handleStateChange() 函数,但是遇到了编码的问题,读取出来的内容是乱码,找了一些资料,有提到一些方式,不过是使用隐藏一个框架或隐藏一个span标签,再通过定时刷新之类的方法,这与AJAX的XMLHTTP方法不太一样,虽然也可以实现无页面刷新(好像有点跑题了-_-|||)。说回编码的问题,网上的解决方法还真的很少,找了半天没找到一种合适的,不到倒是知道了原因,是因为ResponseText属性默认将响应数据的编码定为UTF-8。还好遇到个高手,介绍了一种方法,就是在服务器端用escape()编码内容,再在客户端用unescape()解编码。下面是相关的代码:

    ---------------------js---------------------------
    <script language="javascript">
    var xmlHttp;
    var ready = false;

    //创建对象
    function createXMLHttpRequest(){
    if (window.ActiveXObject){
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }else if (window.XMLHttpRequest){
    xmlHttp = new XMLHttpRequest("Msxml2.XMLHTTP.3.0");
    }
    }

    //发请请求
    function doSearch(url){
    createXMLHttpRequest();
    xmlHttp.onreadystatechange = handleStateChange;
    xmlHttp.open("GET",url,"true");
    xmlHttp.send(null);
    }

    //处理响应
    function handleStateChange(){
    if (xmlHttp.readyState == 4){
    if (xmlHttp.status == 200){
    document.getElementById("results").innerHTML = unescape(xmlHttp.ResponseText);//用unescape()解编码
    }
    }
    else {
    document.getElementById("results").innerHTML = "请稍候……";
    }
    }

    //取得URL
    function createURL(text){
    var url;
    url = "BranchAreaInfo.asp?AreaID=";
    if (text != ""){
    url += escape(text);
    doSearch(url);
    }
    }
    </script>
    -------------------------------------------------

    --------------------ASP--------------------------
    <%
    Dim WDiv
    .....

    do while not rsBAI.eof

    WDiv = WDiv & "<div class='shop_list2'>"
    WDiv = WDiv & "<div class='shop_list'>"
    WDiv = WDiv & "<a href='#'><img alt='" & rsBAI("name") & "' src='" & rsBAI("photo") & "' /></a>"
    WDiv = WDiv & "<dl>"
    WDiv = WDiv & "<dt><a href='#'>"& rsBAI("name") & "</a></dt>"
    WDiv = WDiv & "<dd>电话:" & rsBAI("phone")& "</dd>"
    WDiv = WDiv & "<dd>传真:" & rsBAI("fax")& "</dd>"
    WDiv = WDiv & "<dd>地址:" & rsBAI("address")& "</dd>"
    WDiv = WDiv & "<dd class='lookall'><a href='#'>参观一下</a></dd>"
    WDiv = WDiv & "</dl>"
    WDiv = WDiv & "</div>"
    WDiv = WDiv & "</div>"

    rsBAI.movenext
    loop
    response.Write(vbescape(WDiv))
    %>
    <script language="javascript" runat="server">
    function vbescape(text){
    return escape(text);//用escape()编码
    }
    </script>
    ------------------------------------------------

  • 刚开始学XMLHTTP,试写的一个读取XML的JS脚本,没什么技术含量,主要用来读取一个类似于通讯录的XML文件。

    ------------------------------js-----------------------------------
    <script type="text/javascript">
    var xmlHttp;

    //创建对象
    function createXMLHttpRequest(){
     if (window.ActiveXObject){
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
     }else if (window.XMLHttpRequest){
      xmlHttp = new XMLHttpRequest("Msxml2.XMLHTTP.3.0");
     }
    }

    //发请请求
    function doSearch(url){
     createXMLHttpRequest();
     xmlHttp.onreadystatechange = handleStateChange;
     xmlHttp.open("GET",url,"true");
     xmlHttp.send(null);
    }

    //处理响应
    function handleStateChange(){
     if (xmlHttp.readyState == 4){
      if (xmlHttp.status == 200){
       parseResults();
      }
     }
    }

    //取得URL
    function createURL(text){
     var url;
     url = "BranchAreaInfo.asp?AreaID=";
     if (text != ""){
      url += escape(text);
      doSearch(url);
     }
    }

    //读取XML文件
    function parseResults(){

     var results = xmlHttp.responseXML;
     var sDiv = "";

     var shop = "null";
     var name ="";
     var address = "";
     var phone = "";
     var fax = "";

     var hhitshop = results.getElementsByTagName("shop");
     for (var i = 0; i< hhitshop.length; i++){
      shop =  hhitshop[i];
      name = shop.getElementsByTagName("name")[0].firstChild.nodeValue;
      phone = shop.getElementsByTagName("phone")[0].firstChild.nodeValue;
      fax = shop.getElementsByTagName("fax")[0].firstChild.nodeValue;
      address = shop.getElementsByTagName("address")[0].firstChild.nodeValue;

      sDiv += addDiv(name,photo,address,phone,fax);
     }
     document.getElementById("results").innerHTML = sDiv;
    }

    //输出格式化
    function addDiv(name,photo,address,phone,fax){
     var WDiv = "<div class='shop_list'>";
     WDiv += "<a href='#'><img alt='"+ name +"' src='"+ photo +"' /></a>";
     WDiv += "<dl>";
     WDiv += "<dt><a href='#'>名称</a></dt>";
     WDiv += "<dd>电话:"+ phone +"</dd>";
     WDiv += "<dd>传真:"+ fax +"</dd>";
     WDiv += "<dd>地址:"+ address +"</dd>";
     WDiv += "</dl>";
     WDiv += "</div>";
     
     return WDiv;
    }
    </script>
    ----------------------------------------------------------------

    -----------------------------XML------------------------------
    <?xml version="1.0" encoding="utf-8" ?>
    <hhitshop>

     <shop>
      <name>aa</name>
      <phone>01234567</phone>
      <fax>01234567</fax>
      <address>aaaaa</address>
     </shop>

     <shop>
      <name>bb</name>
      <phone>12345678</phone>
      <fax>12345678</fax>
      <address>bbbbb</address>
     </shop>

     <shop>
      <name>cc</name>
      <phone>23456789</phone>
      <fax>23456789</fax>
      <address>ccccc</address>
     </shop>
    </hhitshop>
    -----------------------------------------------------------------

  • 我们经常会遇到在页面中的图片按照我们自己的大小来显示,这样可以让页面看起来更规范一些。 
    比如我们要在页面种显示130×160的图片,相当于我们将图片放入这样的一个相框那,超过的就缩放到这个框的大小,小的就原样显示。

      
        我们这里有2种解决办法, 
        1,不按照比例的缩放 <script language="javascript"> 
    function changeImg(mypic){ 
        var xw=130; 
        var xl=160; 

        var width = mypic.width; 
        var height = mypic.height; 
                         
        if (width > xw ) mypic.width = xw; 
        if (height > xl ) mypic.height = xl; 

    </script> 
    <img src="sh180.jpg" onload="changeImg(this)">     

     

    2,按照比例的缩放 
    <script language="javascript"> 
    function changeImg1(mypic){ 
        var xw=160; 
        var xl=180; 
             
        var width = mypic.width; 
        var height = mypic.height; 
        var bili = width/height;         
             
        var A=xw/width; 
        var B=xl/height; 
             
        if(A>1||B>1) 
        { 
            if(A<B) 
            { 
                mypic.width=xw; 
                mypic.height=xw/bili; 
            } 
            if(A>B) 
            { 
                mypic.width=xl*bili; 
                mypic.height=xl; 
            } 
        } 

    </script> 
    <img src="sh180.jpg" onload="changeImg(this)"> 

    转自www.xyhhxx.com

  • 以下以 IE 代替 Internet Explorer,以 MF 代替 Mozzila Firefox 

    1. document.form.item 问题 
    (1)现有问题: 
    现有代码中存在许多 document.formName.item("itemName") 这样的语句,不能在 MF 下运行 
    (2)解决方法: 
    改用 document.formName.elements["elementName"] 
    (3)其它 
    参见 2 

    2. 集合对象问题 
    (1)现有问题: 
    现有代码中许多集合对象取用时使用 (),IE 能接受,MF 不能。 
    (2)解决方法: 
    改用 [] 作为下标运算。如:document.forms("formName") 改为 document.forms["formName"]。 
    又如:document.getElementsByName("inputName")(1) 改为 document.getElementsByName("inputName")[1] 
    (3)其它 

    3. window.event 
    (1)现有问题: 
    使用 window.event 无法在 MF 上运行 
    (2)解决方法: 
    MF 的 event 只能在事件发生的现场使用,此问题暂无法解决。可以这样变通: 
    原代码(可在IE中运行): 
     
    ... 
     
    function gotoSubmit() { 
    ... 
    alert(window.event); // use window.event 
    ... 

     

    新代码(可在IE和MF中运行): 
     
    ... 
     
    function gotoSubmit(evt) { 
    evt = evt ? evt : (window.event ? window.event : null); 
    ... 
    alert(evt); // use evt 
    ... 

     
    此外,如果新代码中第一行不改,与老代码一样的话(即 gotoSubmit 调用没有给参数),则仍然只能在IE中运行,但不会出错。所以,这种方案 tpl 部分仍与老代码兼容。 

    4. HTML 对象的 id 作为对象名的问题 
    (1)现有问题 
    在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 MF 中不能。 
    (2)解决方法 
    用 getElementById("idName") 代替 idName 作为对象变量使用。 

    5. 用idName字符串取得对象的问题 
    (1)现有问题 
    在IE中,利用 eval(idName) 可以取得 id 为 idName 的 HTML 对象,在MF 中不能。 
    (2)解决方法 
    用 getElementById(idName) 代替 eval(idName)。 

    6. 变量名与某 HTML 对象 id 相同的问题 
    (1)现有问题 
    在 MF 中,因为对象 id 不作为 HTML 对象的名称,所以可以使用与 HTML 对象 id 相同的变量名,IE 中不能。 
    (2)解决方法 
    在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。 
    此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误。 
    (3)其它 
    参见 问题4 

    7. event.x 与 event.y 问题 
    (1)现有问题 
    在IE 中,event 对象有 x, y 属性,MF中没有。 
    (2)解决方法 
    在MF中,与event.x 等效的是 event.pageX。但event.pageX IE中没有。 
    故采用 event.clientX 代替 event.x。在IE 中也有这个变量。 
    event.clientX 与 event.pageX 有微妙的差别(当整个页面有滚动条的时候),不过大多数时候是等效的。 

    如果要完全一样,可以稍麻烦些: 
    mX = event.x ? event.x : event.pageX; 
    然后用 mX 代替 event.x 
    (3)其它 
    event.layerX 在 IE 与 MF 中都有,具体意义有无差别尚未试验。 


    8. 关于frame 
    (1)现有问题 
    在 IE中 可以用window.testFrame取得该frame,mf中不行 
    (2)解决方法 
    在frame的使用方面mf和ie的最主要的区别是: 
    如果在frame标签中书写了以下属性: 
     
    那么ie可以通过id或者name访问这个frame对应的window对象 
    而mf只可以通过name来访问这个frame对应的window对象 
    例如如果上述frame标签写在最上层的window里面的htm里面,那么可以这样访问 
    ie: window.top.frameId或者window.top.frameName来访问这个window对象 
    mf: 只能这样window.top.frameName来访问这个window对象 

    另外,在mf和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签 
    并且可以通过window.top.document.getElementById("testFrame").src = ’xx.htm’来切换frame的内容 
    也都可以通过window.top.frameName.location = ’xx.htm’来切换frame的内容 
    关于frame和window的描述可以参见bbs的‘window与frame’文章 
    以及/test/js/test_frame/目录下面的测试 
    ----adun 2004.12.09修改 

    9. 在mf中,自己定义的属性必须getAttribute()取得 
    10.在mf中没有 parentElement parement.children 而用 
    parentNode parentNode.childNodes 
    childNodes的下标的含义在IE和MF中不同,MF使用DOM规范,childNodes中会插入空白文本节点。 
    一般可以通过node.getElementsByTagName()来回避这个问题。 
    当html中节点缺失时,IE和MF对parentNode的解释不同,例如 


     
     
     
     
    MF中input.parentNode的值为form, 而IE中input.parentNode的值为空节点 

    MF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node) 

    11.const 问题 
    (1)现有问题: 
    在 IE 中不能使用 const 关键字。如 const constVar = 32; 在IE中这是语法错误。 
    (2)解决方法
    不使用 const ,以 var 代替。 

    12. body 对象 
    MF的body在body标签没有被浏览器完全读入之前就存在,而IE则必须在body完全被读入之后才存在 

    13. url encoding 
    在js中如果书写url就直接写&不要写&例如var url = ’xx.jsp?objectName=xx&objectEvent=xxx’; 
    frm.action = url那么很有可能url不会被正常显示以至于参数没有正确的传到服务器 
    一般会服务器报错参数没有找到 
    当然如果是在tpl中例外,因为tpl中符合xml规范,要求&书写为& 
    一般MF无法识别js中的&

    14. nodeName 和 tagName 问题 
    (1)现有问题: 
    在MF中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值。在 IE 中,nodeName 的使用好象 
    有问题(具体情况没有测试,但我的IE已经死了好几次)。 
    (2)解决方法: 
    使用 tagName,但应检测其是否为空。 

    15. 元素属性 
    IE下 input.type属性为只读,但是MF下可以修改

    16. document.getElementsByName() 和 document.all[name] 的问题 
    (1)现有问题: 
    在 IE 中,getElementsByName()、document.all[name] 均不能用来取得 div 元素(是否还有其它不能取的元素还不知道)。

    转自www.xyhhxx.com