FireFox에서 innerText 구현 코드 지원

4035 단어
Firefox를 위해 innerText 속성을 실현하기 위해 많은 코드를 쓰다가 잊어버리고 또 쓰다가 낭비하기 때문에 필기하는 습관을 기르기로 했다.
지식 포인트:
0、왜 innerText가 필요합니까?안전 문제 때문에.
1. Firefoxdom 모델에 대한 속성 확장
2. currentStyle 속성은 실제 스타일 상태를 얻을 수 있다.
3. IE가 innerText를 실현할 때 디스플레이 방식을 고려하고 Block이면 줄을 바꾼다
4、왜 textContent를 사용하지 않습니까?textContent는 요소의 디스플레이 방식을 고려하지 않기 때문에 IE와 완전히 호환되지 않습니다
 
  


cccddd
eeee
fff

<br><!-- <br>// <br>// patch of innerText for firefox <br>// <br>(function (bool) { <br>function setInnerText(o, s) { <br>while (o.childNodes.length != 0) { <br>o.removeChild(o.childNodes[0]); <br>} <br>o.appendChild(document.createTextNode(s)); <br>} <br>function getInnerText(o) { <br>var sRet = ""; <br>for (var i = 0; i < o.childNodes.length; i ++) { <br>if (o.childNodes[i].childNodes.length != 0) { <br>sRet += getInnerText(o.childNodes[i]); <br>} <br>if (o.childNodes[i].nodeValue) { <br>if (o.currentStyle.display == "block") { <br>sRet += o.childNodes[i].nodeValue + "
"; <br>} else { <br>sRet += o.childNodes[i].nodeValue; <br>} <br>} <br>} <br>return sRet; <br>} <br>if (bool) { <br>HTMLElement.prototype.__defineGetter__("currentStyle", function () { <br>return this.ownerDocument.defaultView.getComputedStyle(this, null); <br>}); <br>HTMLElement.prototype.__defineGetter__("innerText", function () { <br>return getInnerText(this); <br>}) <br>HTMLElement.prototype.__defineSetter__("innerText", function(s) { <br>setInnerText(this, s); <br>}) <br>} <br>})(/Firefox/.test(window.navigator.userAgent)); <br>//--> <br>

<br><!-- <br>var d1 = document.getElementById("d1"); <br>alert(d1.innerText); <br>d1.innerText = "xxx"; <br>//--> <br>



오늘 Firefox에서 복제를 지원하는 js 코드를 제작할 때 innerText를 사용했습니다. 원래 Firefox에서 innerHTML을 지원하지만 innerText를 지원하지 않는 것을 발견했기 때문에 인터넷에서 찾아보니 아주 좋은 코드가 발견되었습니다.다른 회답에서 우리는 다음과 같은 호환 코드를 얻었다.원래 i에서 잘못된 알림이 발생한 문제를 수정했습니다.구체적으로 어떤 문장을 보시오.
이 부분을 JS 파일에 추가하면 MOZILLA/FIREFOX에서 innerText를 사용할 수 있습니다
 
  
HTMLElement.prototype.__defineGetter__
(
"innerText",
function ()
{
var anyString = "";

var childS = this.childNodes;
for(var i=0; i{
if(childS[i].nodeType==1)
anyString += childS[i].tagName=="BR" ? '
' : childS[i].innerText;
else if(childS[i].nodeType==3)
anyString += childS[i].nodeValue;
}
return anyString;
}
);

그러나 이 코드는 IE에서 HTMLElement이 정의되지 않았음을 알려 줍니다. 다음은 구체적인 해결 방법입니다.
 
  
function isIE(){ //ie? ie
if (window.navigator.userAgent.indexOf("MSIE")>=1)
return true;
else
return false;
}
if(!isIE()){
HTMLElement.prototype.__defineGetter__
(
"innerText",
function ()
{
var anyString = "";

var childS = this.childNodes;
for(var i=0; i{
if(childS[i].nodeType==1)
anyString += childS[i].tagName=="BR" ? '
' : childS[i].innerText;
else if(childS[i].nodeType==3)
anyString += childS[i].nodeValue;
}
return anyString;
}
);
}

좋은 웹페이지 즐겨찾기