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

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

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

    Sealyu

    --- 博客已遷移至: http://www.sealyu.com/blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
    Author: Sealyu  2010-6-10

    這兩天在處理瀏覽器兼容的時候碰到很多問題,特別是在重新命名checkbox的時候,在IE和Safari中都碰到一些怪異的問題。
    1. IE中不能在運行時重命名元素。

         按照微軟的解釋,運行時是無法重命名的:
         After some digging, I found an explanation in the MSDN DHTML reference, on the page describing the NAME Attribute.

    The NAME attribute cannot be set at run time on elements dynamically created with the createElement method. To create an element with a name attribute, include the attribute and value when using the createElement method.

    后來找到國外的一篇帖子,找到一個解決方法,那就是使用mergeAttributes 方法,模擬新建一個只有name不同的元素,并和之前的元素合并,這樣就能達到重命名的效果了。代碼如下:

    var setElementName = function(el, newName) {

    el 
    = (typeof el === "string"? document.getElementById(el) : el;

    el.name 
    = newName;

    if(/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { // Internet Explorer test 

    el.mergeAttributes(document.createElement(
    "<INPUT name='" + newName + "'/>"), false);

    }

    };

    2. Safari中,如果用getElementsByName得到一個checkbox組,那么重命名的時 候,無法用for循環全部重命名
    例如:
    var checkBoxes = document.getElementsByName("testCheckbox");
              
    var checkBoxesSize = checkBoxes.length;
              
    for (var i = checkBoxesSize - 1; i >= 0; i--) {
                 
    if (checkBoxes[i] && !checkBoxes[i].checked) {
                     setElementName(checkBoxes[i],
    "testCheckbox-new");
                 }
               }
    這種情況在IE和Firefox下面都沒有問題,全部的checkbox都會被成功的重命名。
    但是在Safari下面,無法實現這個目的。經過調試發現,在Safari中,如果使用getElementsByName來得到這個checkbox組,那么在重命名的時候,如果使用for循環來依次進行,那么每重命名一個checkbox,safari將自動將這個元素從for循環中移除,這樣這個循環在進行到一半的時候就會報錯:checkBoxes[i][null]不是一個元素。
    糾結了一段時間,本來打算想一個算法來解決這個問題,后來突然想到另外一個簡單一點的方法:
    使用getElementsByTagName方法來得到所有元素,并從中篩選出對應的checkbox,如果符合條件,再重命名。這種情況下,因為使用的tag類型來獲得的數組,所以在for循環中,在重命名checkbox后,safari就不會自動的移除對應的元素。具體代碼如下:

            
    var elementlist = document.getElementsByTagName("input");
            
    var elementSize = elementlist.length;
            
    for(var i=0; i<elementSize;i++){
                
    var curElement = elementlist[i];
                
    if(curElement.type =='checkbox' && curElement.name == 'testCheckbox' && !curElement.checked){
                    curElement.name
    ='testCheckbox-new';
                }
            }

    posted on 2010-06-11 00:10 seal 閱讀(1607) 評論(0)  編輯  收藏 所屬分類: Javascript
    主站蜘蛛池模板: 美女羞羞喷液视频免费| 麻豆狠色伊人亚洲综合网站| 国产成人亚洲精品无码AV大片| 国产香蕉免费精品视频| 亚洲三级中文字幕| 4虎永免费最新永久免费地址| 久久亚洲AV成人无码软件| 最近中文字幕免费完整| 亚洲国产综合自在线另类| 可以免费看的卡一卡二| 亚洲AV男人的天堂在线观看| 青草草在线视频永久免费| 国产精品亚洲专区无码牛牛| va亚洲va日韩不卡在线观看| 国产精品小视频免费无限app| 亚洲成AV人片在线观看无码| 免费A级毛片无码视频| 亚洲成a人片在线看| 国产自产拍精品视频免费看| 一区二区三区免费电影| 日韩精品亚洲专区在线观看| 色综合久久精品亚洲国产| 免费在线视频一区| 久章草在线精品视频免费观看| 亚洲国产视频网站| 国产无遮挡色视频免费视频| 污视频网站免费观看| 亚洲国产无套无码av电影| 四虎成年永久免费网站| 色天使色婷婷在线影院亚洲| 亚洲中文字幕无码一久久区| 亚洲成年人免费网站| 国产精品无码亚洲精品2021| 亚洲色大成网站WWW久久九九| 182tv免费观看在线视频| 日韩国产精品亚洲а∨天堂免| 亚洲一区二区三区免费| 亚洲免费闲人蜜桃| 春意影院午夜爽爽爽免费| 亚洲美女免费视频| 一本色道久久88亚洲综合|