<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 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評(píng)論 :: 0 Trackbacks
    Author: Sealyu  2010-6-10

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

         按照微軟的解釋,運(yùn)行時(shí)是無(wú)法重命名的:
         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.

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

    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得到一個(gè)checkbox組,那么重命名的時(shí) 候,無(wú)法用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下面都沒(méi)有問(wèn)題,全部的checkbox都會(huì)被成功的重命名。
    但是在Safari下面,無(wú)法實(shí)現(xiàn)這個(gè)目的。經(jīng)過(guò)調(diào)試發(fā)現(xiàn),在Safari中,如果使用getElementsByName來(lái)得到這個(gè)checkbox組,那么在重命名的時(shí)候,如果使用for循環(huán)來(lái)依次進(jìn)行,那么每重命名一個(gè)checkbox,safari將自動(dòng)將這個(gè)元素從for循環(huán)中移除,這樣這個(gè)循環(huán)在進(jìn)行到一半的時(shí)候就會(huì)報(bào)錯(cuò):checkBoxes[i][null]不是一個(gè)元素。
    糾結(jié)了一段時(shí)間,本來(lái)打算想一個(gè)算法來(lái)解決這個(gè)問(wèn)題,后來(lái)突然想到另外一個(gè)簡(jiǎn)單一點(diǎn)的方法:
    使用getElementsByTagName方法來(lái)得到所有元素,并從中篩選出對(duì)應(yīng)的checkbox,如果符合條件,再重命名。這種情況下,因?yàn)槭褂玫膖ag類型來(lái)獲得的數(shù)組,所以在for循環(huán)中,在重命名checkbox后,safari就不會(huì)自動(dòng)的移除對(duì)應(yīng)的元素。具體代碼如下:

            
    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) 評(píng)論(0)  編輯  收藏 所屬分類: Javascript
    主站蜘蛛池模板: 亚洲国产av美女网站| 亚洲av无码片在线播放| 亚洲精品456人成在线| 91精品手机国产免费| 亚洲第一成年人网站| 91视频免费网址| 91亚洲性爱在线视频| 免费H网站在线观看的| 亚洲免费在线视频观看| 成人免费午夜视频| 亚洲AV成人精品一区二区三区| 四虎成人免费网址在线| 亚洲AV成人无码久久WWW| 亚洲精品国产精品乱码不卡| 一级中文字幕免费乱码专区| 中文字幕在线亚洲精品| 久别的草原电视剧免费观看| 在线观看亚洲人成网站| 一色屋成人免费精品网站| 亚洲乱码av中文一区二区| 免费一级做a爰片性色毛片| 无码免费又爽又高潮喷水的视频 | 最新猫咪www免费人成| 亚洲色大情网站www| 亚洲性在线看高清h片| 中文字幕无码免费久久| 亚洲伊人精品综合在合线| 国产伦精品一区二区三区免费下载| 性生大片视频免费观看一级| 亚洲AV午夜福利精品一区二区| 最近2019免费中文字幕6| 亚洲色精品VR一区区三区| 亚洲国产一区视频| 一级毛片免费播放| 亚洲精品理论电影在线观看| 久久久久国产亚洲AV麻豆| **真实毛片免费观看| 美女视频黄a视频全免费网站色| 亚洲精品无码国产| 毛片基地免费视频a| 中国一级特黄的片子免费 |