innerHTML在IE中的问题及解决方案

在低级IE下用innerHTML获取标签文本时,得到的字符串会有"标签会变成大写","属性值引号丢失"等问题。网上已有修正兼容IE的获取innerHTML方法。使用过程发现挺好的.

function getInnerHTML(elm){  
    var content = elm.innerHTML;
    if(!document.all) return content;
    var regOne = /(\s+\w+)\s*=\s*([^<>"\s]+)(?=[^<>]*\/>)/ig;
    var regTwo = /"'([^'"]*)'"/ig; 
    content = content.replace(regOne,'$1="$2"').replace(regTwo,'\"$1\"'); 
    var okText = content.replace(/<(\/?)(\w+)([^>]*)>/g,function(match,$1,$2,$3){
        if($1){
            return "</"+ $2.toLowerCase() +">";       
        }       
        return ("<"+ $2.toLowerCase() +$3+">").replace(/=(("[^"]*?")|('[^']*?')|([\w\-\.]+))([\s>])/g,function(match2,$1,$2,$3,$4,$5,position,all){
            if($4){return '="'+ $4 +'"'+ $5;}
            return match2;
       });
    });
    return okText.replace(/<\/?([^>]+\)>/g,function(lele){return lele;});
}

另一个问题是IE下部分标签(COL, COLGROUP, FRAMESET, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR.)的innerHTML属性是只读的。这样在ie下操作tr.innerHTML="something"时会报错。不过td的innerHTML却支持写入。

给一个具体的表格增加行和单元格时,在IE中可以这么操作:

if (documen.all) {  
    var tbody = document.getElementById('table1').tBodies[0];
    var tr = document.createElement("tr");
    var td = document.createElement("td");
    td.innerHTMl = "something";
    tr.appendChild(td);
    tbody.appendChild(tr)
}