Created
January 7, 2013 15:47
-
-
Save shimondoodkin/4475979 to your computer and use it in GitHub Desktop.
InnerHTML & setAttribute for ie6-ie8 that do not suffer from restriction
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //innerHTML of these elements in internet explorer are read only: | |
| //COL, COLGROUP, FRAMESET, HEAD, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR, SELECT. | |
| //example: | |
| // function createtable(deal) | |
| // { | |
| // var table = document.createElement('table'); | |
| // table.className='infotable'; | |
| // //table.innerHTML='<tbody><tr><td>123</td></tr></tbody>' // will not work in internet explorer | |
| // setInnerHTML(table,'<tbody><tr><td>123</td></tr></tbody>') | |
| // return table; | |
| // } | |
| // also: | |
| // eltable.className = "infotable"; // works well in all browsers | |
| // or | |
| // setAttribute(eltable,'class',"infotable") // only if you need to use setAttribute for strange values like class. | |
| // | |
| var msie= navigator && navigator.userAgent.match( /MSIE/i )?true:false | |
| var msiever=-1;if(msie){if (/MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(navigator.userAgent) != null) msiever = parseFloat( RegExp.$1 );} | |
| function setAttribute(targetdomobj,name,value) | |
| { | |
| if(!msie ){targetdomobj.setAttribute(name,value); return;} // if not msie then it works normal | |
| var attr = document.createAttribute(name); | |
| attr.value = value; | |
| targetdomobj.setAttributeNode(attr); | |
| } | |
| //in Internet explorrer you cant set innerHMTL to a table workaround: crate div, append a table, use the table ,delete the div | |
| function setInnerHTML(targetdomobj,html) | |
| { | |
| if(!msie){targetdomobj.innerHTML=html; return;} // if not msie then it works normal | |
| if(!setInnerHTML_holderobj)setInnerHTML_holderobj=document.createElement("div"); | |
| var holderobj=setInnerHTML_holderobj; | |
| //innerHTML of these elements in internet explorer are read only: | |
| //COL, COLGROUP, FRAMESET, HEAD, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR, SELECT. | |
| //not fixed: | |
| //, , FRAMESET, HEAD, HTML, STYLE, , , , , TITLE, . | |
| //they .. can be fixed with document.write on iframe, for ie5.5 an existing one | |
| // | |
| var targettagname=targetdomobj.tagName.toUpperCase(); | |
| if(targettagname=="TR") //html.match( /^\s*\<TD/i)||html.match( /^\s*\<TH/i) | |
| { | |
| html='<table><tbody><tr>'+html+'</tr></tbody></table>' | |
| holderobj.innerHTML=html; | |
| setInnerHTML_replaceDomChildren(targetdomobj,holderobj,3) | |
| } | |
| else if(targettagname=="TBODY") //html.match( /^\s*\<TR/i) | |
| { | |
| html='<table><tbody>'+html+'</tbody></table>' | |
| holderobj.innerHTML=html; | |
| setInnerHTML_replaceDomChildren(targetdomobj,holderobj,2) | |
| } | |
| else if(targettagname=="TABLE") //html.match( /^\s*\<TBODY/i) || html.match( /^\s*\<TFOOT/i) || html.match( /^\s*\<THEAD/i) || html.match( /^\s*\<COLGROUP/i) | |
| { | |
| html='<table>'+html+'</table>' | |
| holderobj.innerHTML=html; | |
| setInnerHTML_replaceDomChildren(targetdomobj,holderobj,1) | |
| } | |
| else if(targettagname=="COLGROUP")//html.match( /^\s*\<COL/i) | |
| { | |
| html='<table><colgroup>'+html+'</colgroup></table>' | |
| holderobj.innerHTML=html; | |
| setInnerHTML_replaceDomChildren(targetdomobj,holderobj,2) | |
| } | |
| else if(targettagname=="SELECT") | |
| { | |
| html='<select>'+html+'</select>' | |
| holderobj.innerHTML=html; | |
| setInnerHTML_replaceDomChildren(targetdomobj,holderobj,1) | |
| } | |
| } | |
| var setInnerHTML_holderobj; | |
| function setInnerHTML_replaceDomChildren(targetdomobj,holderobj,level) | |
| { | |
| // emptytarget | |
| while (targetdomobj.hasChildNodes()) | |
| targetdomobj.removeChild(targetdomobj.firstChild); | |
| // move children from holder to target | |
| if(level==1) | |
| { | |
| while (holderobj.firstChild.hasChildNodes()) | |
| targetdomobj.appendChild( holderobj.firstChild.removeChild(holderobj.firstChild.firstChild) ); | |
| } | |
| else | |
| if(level==2) | |
| { | |
| while (holderobj.firstChild.firstChild.hasChildNodes()) | |
| targetdomobj.appendChild( holderobj.firstChild.firstChild.removeChild(holderobj.firstChild.firstChild.firstChild) ); | |
| } | |
| else | |
| if(level==3) | |
| { | |
| while (holderobj.firstChild.firstChild.firstChild.hasChildNodes()) | |
| targetdomobj.appendChild( holderobj.firstChild.firstChild.firstChild.removeChild(holderobj.firstChild.firstChild.firstChild.firstChild) ); | |
| } | |
| // empty holder object after use | |
| while (holderobj.hasChildNodes()) | |
| holderobj.removeChild(holderobj.firstChild); | |
| } | |
| // | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment