<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)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 免费v片在线观看无遮挡| 亚洲精品动漫人成3d在线| 亚洲色大情网站www| 免费在线一级毛片| 久久久精品午夜免费不卡| 亚洲成aⅴ人在线观看| 国产18禁黄网站免费观看| 拍拍拍无挡免费视频网站| 色偷偷亚洲女人天堂观看欧| 亚洲AV伊人久久青青草原| 182tv免费视视频线路一二三| 精品亚洲av无码一区二区柚蜜| 亚洲Av综合色区无码专区桃色| 成年人在线免费观看| 国产乱子伦精品免费视频| 亚洲日本视频在线观看| 亚洲AV伊人久久青青草原| 四虎成年永久免费网站| 黄色视屏在线免费播放| 涩涩色中文综合亚洲| 亚洲AV综合色区无码一区爱AV| 黄a大片av永久免费| 99免费观看视频| 一级黄色免费大片| 在线亚洲午夜片AV大片| 国产V亚洲V天堂A无码| 国产免费人视频在线观看免费| 182tv免费视视频线路一二三| CAOPORN国产精品免费视频| 亚洲国产欧美一区二区三区| 亚洲视频在线一区二区三区| 亚洲毛片αv无线播放一区| 人人狠狠综合久久亚洲高清| 人禽杂交18禁网站免费| 午夜精品免费在线观看| 精品多毛少妇人妻AV免费久久| 亚洲AV无码AV吞精久久| 亚洲国产综合精品中文第一| 亚洲视屏在线观看| 久久91亚洲精品中文字幕| 红杏亚洲影院一区二区三区|