FireFox 가 innerText 의 실현 코드 를 지원 하도록 합 니 다.

3752 단어 FireFoxinnerText
fireforx 를 위해 innerText 속성 을 실현 하기 위해 많은 코드 를 쓰 고 잊 고 쓰 는 것 을 잊 어 버 리 고 낭비 하기 때문에 필 기 를 하 는 습관 을 들 이기 로 했 습 니 다.지식 포인트:0,왜 innerText?보안 문제 1.fireforx dom 모델 의 확장 속성 2.currentStyle 속성 은 실제 style 상 태 를 얻 을 수 있 습 니 다.3.IE 가 innerText 를 실현 할 때 display 방식 을 고려 했 습 니 다.block 이 라면 줄 을 바 꾸 었 습 니 다.4.왜 textContent 를 사용 하지 않 습 니까?textContent 는 요소 의 display 방식 을 고려 하지 않 았 기 때문에 IE 와 완전히 호 환 되 지 않 았 습 니 다
 
<html>
<body>
<div id="d1"><a href="aa">ccc</a>ddd<div>eeee</div>fff</div>
<script type="text/javascript">
<!--
//
// patch of innerText for firefox
//
(function (bool) {
function setInnerText(o, s) {
while (o.childNodes.length != 0) {
o.removeChild(o.childNodes[0]);
}
o.appendChild(document.createTextNode(s));
}
function getInnerText(o) {
var sRet = "";
for (var i = 0; i < o.childNodes.length; i ++) {
if (o.childNodes[i].childNodes.length != 0) {
sRet += getInnerText(o.childNodes[i]);
}
if (o.childNodes[i].nodeValue) {
if (o.currentStyle.display == "block") {
sRet += o.childNodes[i].nodeValue + "
";
} else {
sRet += o.childNodes[i].nodeValue;
}
}
}
return sRet;
}
if (bool) {
HTMLElement.prototype.__defineGetter__("currentStyle", function () {
return this.ownerDocument.defaultView.getComputedStyle(this, null);
});
HTMLElement.prototype.__defineGetter__("innerText", function () {
return getInnerText(this);
})
HTMLElement.prototype.__defineSetter__("innerText", function(s) {
setInnerText(this, s);
})
}
})(/Firefox/.test(window.navigator.userAgent));
//-->
</script>
<script type="text/javascript">
<!--
var d1 = document.getElementById("d1");
alert(d1.innerText);
d1.innerText = "xxx";
//-->
</script>
</body>
</html>
.오늘 fireforx 에서 복 제 된 js 코드 를 만 들 때 innerText 를 사 용 했 습 니 다.테스트 결과 원래 fireforx 는 innerHTML 을 지원 하지만 innerText 는 지원 되 지 않 았 기 때문에 인터넷 에서 찾 아 보 니 아주 좋 은 코드 를 발 견 했 습 니 다.또한 답장 에서 우 리 는 다음 과 같은 호 환 코드 를 얻 었 다.원래 ie 에서 잘못된 알림 이 발생 한 문 제 를 수정 하 였 습 니 다.구체 적 으로 어떤 글 을 보 시 겠 습 니까?이 단락 을 JS 파일 에 추가 하면 MOZILLA/FIREFOX 에서 innerText
 
HTMLElement.prototype.__defineGetter__
(
"innerText",
function ()
{
var anyString = "";

var childS = this.childNodes;
for(var i=0; i<childS.length; 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 에서 HTML Element 가 정의 되 지 않 았 음 을 알려 줍 니 다.다음은 구체 적 인 해결 방법 입 니 다.
 
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<childS.length; 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;
}
);
}

좋은 웹페이지 즐겨찾기