몰랐는데... 파이어폭스(FF)에서는
outerHTML을 지원하지 않는다(innerHTML은지원)

그래서 인터넷을 뒤져봤는데... 리턴하는 소스는 많이 나왔는데
값을 덮을수 있는 방법은 잘 나오지 않아서
인터넷 뒤져서 샘플코드를 만든 소스...

해당 outerhtml을 알고싶으면 getouterHtml
해당 outerhtml에 텍스를 치환하고 싶으면 setOuterHtml
를 사용하면 되고, 기타 outerhtml을 지원할 경우는 그 함수를 쓰도록
처리한 소스....

<html>
<title>outerHTML 파이어폭스 대응</title>
<script>
/**************************************
* 샘플 코드 및 펑션 생성 @ 정민철
*
http://tost.tistory.com
*
* 원본 참조소스
*-----------------------------------------------------------
*
http://snipplr.com/view/5460/outerhtml-in-firefox/
* http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=56477
***************************************/
//ff대응 outerhtml결과
function getouterHtml(obj)
{
 var html = null;
 //널처리
 if (obj == null) return null;
 
 if (typeof(obj.outerHTML) == "string")
 {//스트링값을 가져온다면 IE로 가정함
  html =  obj.outerHTML;
  //alert("ie"); //디버그용
 }
 else
 {
  html = (new XMLSerializer).serializeToString(obj);
  //alert("ff"); //디버그용
 }
 return html;
}
//ff대응 outerhtml 삽입
function setOuterHtml(obj, html)
{
 if (obj == null) return; //null처리
 
 if (typeof(obj.outerHTML) == "string")
 {//스트링값을 가져온다면 IE로 가정함
  //alert("ie"); //디버그용
  obj.outerHTML = html
 
 }
 else
 {
  //alert("ff"); //디버그용
     var el = document.createElement('div');
     el.innerHTML = html;
     var range = document.createRange();
     range.selectNodeContents(el);
     var documentFragment = range.extractContents();
     obj.parentNode.insertBefore(documentFragment, obj);
     obj.parentNode.removeChild(obj);
 }
}
</script>




<body>
<div id="test" style="background:yellow;">
원래본문
</div>
<script>
var divobj = document.getElementById("test");
</script>

<a href="javascript:alert(getouterHtml(divobj))">outer값확인</a>
<a href="javascript:setOuterHtml(divobj, 'htmltest')">outer값 변경</a>
</body>
<html>


개인적으로는 웹브라우저가 하나만 남았으면 좋겠다.

+ Recent posts