Javascript在Firefox中innerText出现问题

3
function OpenWindow(anchor) {
        var toUsername = anchor.innerText;
        window.open("ChatWindow.aspx?username=" + toUsername,'_blank', "width=340,height=200");       
    }

这个函数在火狐浏览器中打开一个参数为undefined的页面,而在谷歌浏览器中则会得到正确的值。

火狐浏览器网址: http://localhost:9452/ChatWindow.aspx?username=undefined

该问题的解决方案是什么?

5个回答

14

虽然innerText不是标准属性,但它与textContent有很大的区别,因为前者进行了漂亮打印(例如,<br/>会转换为新行),而后者则不会。

因此,尽管常见的做法是使用:

var toUsername = anchor.innerText || anchor.textContent;

如果你需要一个包装器,可能更明智的做法是使用jQuery的.text或其他你正在使用的库的类似功能。


2
尝试使用以下代码更改anchor.innerText
anchor.textContent

希望这在所有浏览器中都能正常工作。

另请参见此处:'innerText' 在 IE 中有效,但在 Firefox 中无效

附言:我强烈建议使用 JQuery 来避免这些问题,并确保始终编写完全跨浏览器的 JavaScript。


小提示:textContent 在IE8中不起作用。 - Šime Vidas
是的,正是因为这个原因,我建议使用JQuery :) - Davide Piras

2

innerText 是微软的发明,而 textContent 是 W3C 标准。

function OpenWindow(anchor) {
    var toUsername = anchor.textContent || anchor.innerText || '';
    window.open("ChatWindow.aspx?username=" + toUsername,'_blank', "width=340,height=200");       
}

这应该可以工作。MooTools或其他JavaScript框架应该能够帮助解决跨浏览器不一致性问题。

MooTools!好东西! :) - Andbdrew

1
我遇到了同样的问题,因为Firefox不支持innerText属性,而是支持textContent属性。因此,请检查浏览器的功能支持,以相应地使用正确的属性。
if(document.all){
 document.getElementById('element').innerText = "myText";
} else{
document.getElementById('element').textContent = "myText";
}

或者最好使用Jquery来解决跨浏览器问题。 用法:

$('element').text("myText"); 

1
使用textContent代替innerText。 例如:
<script>
function change()
{
   document.getElementById("label").textContent="Hello";
}
</script>

它可以在Firefox和Chrome上运行,但无法在IE上运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接