讓FireFox支持innerText的實(shí)現(xiàn)代碼
更新時(shí)間:2009年12月01日 23:58:51 作者:
DHTML非標(biāo)準(zhǔn)屬性innerText在FireFox中的使用
為firefox實(shí)現(xiàn)innerText屬性
很多代碼寫(xiě)了又忘忘了又寫(xiě),很浪費(fèi),所以決定養(yǎng)成做筆記的習(xí)慣。
知識(shí)點(diǎn):
0、為什么要innerText?因?yàn)榘踩珕?wèn)題
1、為firefox dom模型擴(kuò)展屬性
2、currentStyle屬性可以取得實(shí)際的style狀態(tài)
3、IE實(shí)現(xiàn)innerText時(shí)考慮了display方式,如果是block則加換行
4、為什么不用textContent?因?yàn)閠extContent沒(méi)有考慮元素的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 + "\n";
} 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>
今天在制作firefox下支持復(fù)制的js代碼的時(shí)候,用到了innerText,測(cè)試發(fā)現(xiàn)原來(lái)firefox支持innerHTML但不支持innerText,所以上網(wǎng)找了一下,發(fā)現(xiàn)了一篇非常不錯(cuò)的代碼。另從回復(fù)中,我們得到了如下兼容代碼。修正了原來(lái)ie下出現(xiàn)錯(cuò)誤提示的問(wèn)題。具體的看下么的文章。
把這段加在你所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" ? '\n' : childS[i].innerText;
else if(childS[i].nodeType==3)
anyString += childS[i].nodeValue;
}
return anyString;
}
);
但這段代碼在IE中它會(huì)提示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<childS.length; i++)
{
if(childS[i].nodeType==1)
anyString += childS[i].tagName=="BR" ? '\n' : childS[i].innerText;
else if(childS[i].nodeType==3)
anyString += childS[i].nodeValue;
}
return anyString;
}
);
}
很多代碼寫(xiě)了又忘忘了又寫(xiě),很浪費(fèi),所以決定養(yǎng)成做筆記的習(xí)慣。
知識(shí)點(diǎn):
0、為什么要innerText?因?yàn)榘踩珕?wèn)題
1、為firefox dom模型擴(kuò)展屬性
2、currentStyle屬性可以取得實(shí)際的style狀態(tài)
3、IE實(shí)現(xiàn)innerText時(shí)考慮了display方式,如果是block則加換行
4、為什么不用textContent?因?yàn)閠extContent沒(méi)有考慮元素的display方式,所以不完全與IE兼容
復(fù)制代碼 代碼如下:
<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 + "\n";
} 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>
今天在制作firefox下支持復(fù)制的js代碼的時(shí)候,用到了innerText,測(cè)試發(fā)現(xiàn)原來(lái)firefox支持innerHTML但不支持innerText,所以上網(wǎng)找了一下,發(fā)現(xiàn)了一篇非常不錯(cuò)的代碼。另從回復(fù)中,我們得到了如下兼容代碼。修正了原來(lái)ie下出現(xiàn)錯(cuò)誤提示的問(wèn)題。具體的看下么的文章。
把這段加在你所JS文件中就可以在MOZILLA/FIREFOX下使用innerText
復(fù)制代碼 代碼如下:
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" ? '\n' : childS[i].innerText;
else if(childS[i].nodeType==3)
anyString += childS[i].nodeValue;
}
return anyString;
}
);
但這段代碼在IE中它會(huì)提示HTMLElement未定義,下面就是具體的解決方法。
復(fù)制代碼 代碼如下:
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" ? '\n' : childS[i].innerText;
else if(childS[i].nodeType==3)
anyString += childS[i].nodeValue;
}
return anyString;
}
);
}
相關(guān)文章
js實(shí)現(xiàn)文字垂直滾動(dòng)和鼠標(biāo)懸停效果
這篇文章主要介紹了js實(shí)現(xiàn)文字垂直滾動(dòng)和鼠標(biāo)懸停效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-12-12js實(shí)現(xiàn)前端分頁(yè)頁(yè)碼管理
本文主要介紹了js實(shí)現(xiàn)前端分頁(yè)頁(yè)碼管理的具體方法。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01用 js 的 selection range 操作選擇區(qū)域內(nèi)容和圖片
本篇文章主要介紹了用js的selection range操作選擇區(qū)域內(nèi)容和圖片的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04JS簡(jiǎn)單獲取當(dāng)前日期時(shí)間的方法(如:2017-03-29 11:41:10 星期四)
這篇文章主要介紹了JS簡(jiǎn)單獲取當(dāng)前日期時(shí)間的方法,涉及javascript針對(duì)當(dāng)前日期時(shí)間的簡(jiǎn)單運(yùn)算操作,需要的朋友可以參考下2017-03-03去除JavaScript對(duì)象中空值和空對(duì)象的四種方式
開(kāi)發(fā)時(shí)遇到一個(gè)問(wèn)題,需要將對(duì)象中的空值和空對(duì)象去除,所以這篇文章主要給大家介紹了關(guān)于去除JavaScript對(duì)象中空值和空對(duì)象的四種方式,需要的朋友可以參考下2023-09-09JS獲取子、父、兄節(jié)點(diǎn)方法小結(jié)
這篇文章主要介紹了JS獲取子、父、兄節(jié)點(diǎn)方法總結(jié)及JS獲取兄弟節(jié)點(diǎn)的兩種方法,需要的朋友可以參考下2017-08-08解決JavaScript layui 下拉框不顯示的問(wèn)題
今天小編就為大家分享一篇解決JavaScript layui 下拉框不顯示的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08十個(gè)你必須要會(huì)的TypeScript技巧分享
學(xué)習(xí)Typescript通常是一個(gè)重新發(fā)現(xiàn)的過(guò)程。這篇文章為大家整理了十個(gè)你必須要會(huì)的TypeScript技巧,希望對(duì)大家學(xué)習(xí)TypeScript有所幫助2023-06-06