<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    牙牙窩

    BlogJava 聯系 聚合 管理
      8 Posts :: 21 Stories :: 10 Comments :: 0 Trackbacks

    [轉]JS+DOM的通用性

    1、有關document.all
    這個是IE僅有的,或者說是低版本IE僅有的,后來高版本的IE都可以用W3C標準來替代document.all,我們可以寫一個通用的函數:
    //***********************************
    //我們要盡可能的使用W3C標準的東西
    //如果瀏覽器支持 document.getElementById(),那么首選就使用 document.getElementById() 來獲取對象
    //如果瀏覽器不支持 document.getElementById() 但是支持 document.all[],那么就用 document.all[] 來獲取對象
    //如果瀏覽器既不支持 document.getElementById() 也不支持 document.all[],那我們只好放棄了
    functionfindObj(objname)
    {
    ? varobj=null;
    ? if (document.getElementById)
    ????? obj=document.getElementById(objname);
    ? elseif (document.all)
    ????? obj=document.all[objname];
    ? return(obj);
    }
    //***********************************



    我們看一個簡單的例子,下面這個小程序能在IE 4.01+/Firefox 0.9+/Opera 7.23+都能運行正常:
    //***********************************
    <HTML>
    <HEAD>
    <TITLE>?findObj?</TITLE>
    <SCRIPT?LANGUAGE="JavaScript">
    <!--
    functionfindObj(objname)
    {?
    ? varobj=null;
    ?
    if (document.getElementById)
    ?????
    obj=document.getElementById(objname);
    ?
    elseif (document.all)
    ?????
    obj=document.all[objname];
    ?
    return(obj
    );
    }
    //-->
    </SCRIPT>
    </HEAD>

    <BODY>
    <form>
    <input?type=
    "text"?name="username"?id="username"?value="ifan">
    <input?type="button"?value="Get?myname"?onclick="alert(?findObj(?'username'?).value?);">
    </form>
    </BODY>
    </HTML>

    //***********************************

    關于獲取對象,W3C的標準除了?getElementById()?之外,還有提供了?getElementsByName()按照W3C的標準,元素的Id應該是唯一的,而Name是可以重復的,就像現實生活中的人,姓名可以是相同的,但是身份證號碼是唯一,所以?getElementsByName()?返回的是一個數組。
    在這里,有個很遺憾的地方,那就是在IE?5.0以下的版本,元素的IdName是混用的,尤其表現在表單元素里面,比如:
    //***********************************
    <input?type="text"?name="username"?id="myname"?value="ifan">
    在IE中,我們可以用?document.all["username"]?來引用,也可以用?document.all["myname"]?來引用。
    //***********************************

    而后續的IE版本兼容了這個錯誤,所以在IE里面,調用 getElementsByName() 的時候,其參數是元素的Id而不是Name,比如:
    //***********************************
    <div?name="divName"?id="divId">div1</div>

    <input?type="button"?value="getElementsByName(divName)"
    ???????onclick="alert(document.getElementsByName('divName').length);"><br>

    <input?type="button"?value="getElementsByName(divId)"
    ???????onclick="alert(document.getElementsByName('divId').length);">
    //***********************************
    值得一提的是,Opera?7.23-8.0的版本,都是沿用的IE的做法。

    所以在一般的應用中,我們可以把元素的IdName設置為一樣的,以便兼容更多的瀏覽器。

    ?

    2、有關?event?和?window.event
    在IE/Opera中,是window.event,而在Firefox中,是event
    而事件的對象,在IE中是window.event.srcElement,在Firefox中是event.target,而在Opera中則兩者都支持。
    我們還是用例子來說明。
    //***********************************
    <HTML>
    <HEAD>
    <TITLE>?event的跨瀏覽器測試 </TITLE>
    <SCRIPT?LANGUAGE="JavaScript">
    <!--
    //Firefox中在寫關于event的函數的時候,必須把event對象作為參數傳遞給函數,這樣才能使用event對象
    functiondoTestEvent( evt )
    {
    ? //如果是IE/Opera,我們就用 srcElement 來獲取觸發事件的對象
    ? //如果是Firefox,我們就用 target 來獲取觸發事件的對象
    ? varsrc=evt.srcElement?evt.srcElement:evt.target;
    ? alert( src.value );
    }
    //-->
    </script>
    </head>
    <body>

    <form?
    name="frmtest">
    <input?type="button"?value="event?測試"?onclick="doTestEvent(event);"?name="bttest">
    </form>

    </body>
    </html>

    //***********************************

    這里順便說一下判斷鼠標按鍵的問題。
    在?IE?里面
    左鍵是?window.event.button=1
    右鍵是?window.event.button=2
    中鍵是?window.event.button=4
    沒有按鍵動作的時候?window.event.button=0

    在?Firefox?里面
    左鍵是?event.button=?0
    右鍵是?event.button=2
    中鍵是?event.button=?1
    沒有按鍵動作的時候?event.button=0

    在?Opera?7.23/7.54?里面
    鼠標左鍵是?window.event.button=1
    沒有按鍵動作的時候?window.event.button=?1
    右鍵和中鍵無法獲取

    而在?Opera?7.60/8.0?里面
    鼠標左鍵是?window.event.button=0
    沒有按鍵動作的時候?window.event.button=0
    右鍵和中鍵無法獲取

    下面我們寫一個能在?IE4.01+/Firefox?0.9+/Opera?7.23+?環境中均能運行正常的小程序,功能是用鼠標拖動層。
    //***********************************
    <HTML>
    <HEAD>
    <TITLE>?可用鼠標拖動的層?</TITLE>
    <SCRIPT?LANGUAGE="JavaScript">
    <!--
    varmoving=false;
    varinitX? =0;
    varinitY? =0;

    //*******************
    // 獲取觸發事件的對象
    //*******************
    functionfindSrc(evt)
    {
    ? return( evt.target?evt.target:evt.srcElement );
    }

    functionstart(evt)
    {
    ??? //按下鼠標左鍵才允許移動
    ??? //evt.button == 1 IE/Opera 7.23/7.54
    ??? //evt.button == 0 Firefox/Opera 7.6+
    ??? if ( evt.button==1||evt.button==0)
    ??? {
    ??????? moving=true;
    ??????? initX? =evt.offsetX?evt.offsetX:evt.layerX;
    ??????? initY? =evt.offsetY?evt.offsetY:evt.layerY;
    ??????? findSrc( evt ).style.cursor= "move";
    ??????? window.status= "開始(button=" +evt.button+ ")";
    ??? } else {
    ??????? stop( evt );
    ??? }
    }

    functionstop( evt )
    {
    ??? moving=false;
    ??? findSrc( evt ).style.cursor= "";
    ??? window.status= "結束(button=" +evt.button+ ")";
    }

    functionmove(evt)
    {
    ??? //按下鼠標左鍵才允許移動
    ??? //evt.button == 1 IE/Opera 7.23/7.54
    ??? //evt.button == 0 Firefox/Opera 7.6+
    ??? if (moving&& ( evt.button==1||evt.button==0 ))
    ??? {
    ??????? varintx=document.body.scrollLeft+evt.clientX; //獲取當前鼠標位置的X坐標
    ??????? varinty=document.body.scrollTop+evt.clientY; //獲取當前鼠標位置的Y坐標

    ??????? vardiv=findSrc( evt );
    ??????? div.style.top=inty-initY;
    ??????? div.style.left=intx-initX;
    ??????? window.status= "X=" +intx+ " Y=" +inty+ " button=" +evt.button;
    ??? } else {
    ??????? window.status= "已停止(button=" +evt.button+ ")";
    ??? }
    }
    //-->
    </SCRIPT>
    </HEAD>

    <BODY>
    <div
    ?id="mdiv"
    ?????style="position:?absolute;?width:300px;?height:?200px;?background-color:?#FFFFE1;"
    ?????onmousedown="start(?event?);"
    ?????onmouseup="stop(?event?);"
    ?????onmouseout="stop(?event?);"
    ?????onmousemove="move(?event?);"></div>
    //***********************************

    posted on 2007-01-06 23:28 大牙 閱讀(343) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 相泽亚洲一区中文字幕| 日本免费电影一区| 亚洲精品国产美女久久久| 免费无码午夜福利片69| 亚洲av午夜成人片精品电影 | 四虎在线免费视频| 亚洲国语精品自产拍在线观看 | 国产成人免费手机在线观看视频| 亚洲中文无码卡通动漫野外 | 国产黄色一级毛片亚洲黄片大全| 一级毛片试看60分钟免费播放| 久久亚洲国产成人精品无码区| 国产免费一区二区三区免费视频| 亚洲色欲久久久综合网东京热 | 久草在视频免费福利| 亚洲首页国产精品丝袜| 午夜视频免费观看| 国产av无码专区亚洲av毛片搜| 亚洲午夜福利精品无码| aa毛片免费全部播放完整| 久久精品国产亚洲av影院| 香蕉97超级碰碰碰免费公| 337P日本欧洲亚洲大胆艺术图| 亚洲欧洲久久av| 99久久精品免费精品国产| 亚洲an日韩专区在线| 免费大学生国产在线观看p| 两个人日本WWW免费版| 亚洲欧洲中文日产| 免费v片视频在线观看视频| 免费看一区二区三区四区| 亚洲国产精品久久久久秋霞影院| 日韩免费观看一级毛片看看| caoporm碰最新免费公开视频| 亚洲av综合色区| 成年美女黄网站18禁免费| 精品一区二区三区高清免费观看| 久久久久亚洲AV片无码下载蜜桃| 在线精品免费视频| 国产好大好硬好爽免费不卡| 亚洲一区精品视频在线|