FireFox에서 innerText 구현 코드 지원
지식 포인트:
0、왜 innerText가 필요합니까?안전 문제 때문에.
1. Firefoxdom 모델에 대한 속성 확장
2. currentStyle 속성은 실제 스타일 상태를 얻을 수 있다.
3. IE가 innerText를 실현할 때 디스플레이 방식을 고려하고 Block이면 줄을 바꾼다
4、왜 textContent를 사용하지 않습니까?textContent는 요소의 디스플레이 방식을 고려하지 않기 때문에 IE와 완전히 호환되지 않습니다
cccdddeeeefff
<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;
}
);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.