<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 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      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循環(huán)全部重命名
    例如:
    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下面,無法實現(xiàn)這個目的。經(jīng)過調(diào)試發(fā)現(xiàn),在Safari中,如果使用getElementsByName來得到這個checkbox組,那么在重命名的時候,如果使用for循環(huán)來依次進行,那么每重命名一個checkbox,safari將自動將這個元素從for循環(huán)中移除,這樣這個循環(huán)在進行到一半的時候就會報錯:checkBoxes[i][null]不是一個元素。
    糾結(jié)了一段時間,本來打算想一個算法來解決這個問題,后來突然想到另外一個簡單一點的方法:
    使用getElementsByTagName方法來得到所有元素,并從中篩選出對應的checkbox,如果符合條件,再重命名。這種情況下,因為使用的tag類型來獲得的數(shù)組,所以在for循環(huán)中,在重命名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 閱讀(1600) 評論(0)  編輯  收藏 所屬分類: Javascript
    主站蜘蛛池模板: 久久亚洲日韩精品一区二区三区| 久青草国产免费观看| 一级特黄录像免费播放中文版| 久久久久久久国产免费看| 亚洲?V无码成人精品区日韩 | 亚洲国产婷婷综合在线精品| 欧洲 亚洲 国产图片综合| 国产又大又粗又长免费视频| 亚洲国产精品成人精品小说| 国产日本一线在线观看免费| 亚洲一区二区三区免费观看| 欧美男同gv免费网站观看| 亚洲精品中文字幕| 国产做床爱无遮挡免费视频| 香港经典a毛片免费观看看| 国产大片91精品免费看3| 免费人成视频在线观看免费| 亚洲色自偷自拍另类小说| 在线观看亚洲成人| 成人性生交大片免费看好| 久久精品亚洲一区二区三区浴池| 全部一级一级毛片免费看| 亚洲国产成人五月综合网 | 18gay台湾男同亚洲男同| 久草视频免费在线| 亚洲日韩AV无码一区二区三区人| 免费的全黄一级录像带| 亚洲制服丝袜第一页| 亚洲?V无码乱码国产精品| 欧洲人成在线免费| 色在线亚洲视频www| 亚洲日韩国产成网在线观看| 中文字幕免费不卡二区| 亚洲人成高清在线播放| 亚洲国产成人久久一区久久| 一区二区三区观看免费中文视频在线播放 | 免费在线观看亚洲| 国产白丝无码免费视频| 亚洲天堂2017无码中文| 亚洲人成伊人成综合网久久久| 免费人成再在线观看网站 |