第一种方法不起作用,因为它所做的只是将变量设置为新值,而不会将值写入元素。该生产线
var innerText = d.innerText || d.textContent;
...设置变量innerText
给它找到的文本属性的值,它不是实际的属性本身的参考。
你必须做的分支,如:
var d = document.getElementById('d');
var msg = "new text";
if ("innerText" in d) {
d.innerText = msg;
}
else {
d.textContent = msg;
}
这个功能,检测通过查找元素的属性存在的浏览器是否使用innerText
或textContent
(这是什么in
操作确实,检查对象是否具有给定名称的属性,即使该属性为空,null
,undefined
等)。
你甚至可以自己编写一个函数吧:
var setText = (function() {
function setTextInnerText(element, msg) {
element.innerText = msg;
}
function setTextTextContent(element, msg) {
element.textContent = msg;
}
return "innerText" in document.createElement('span') ? setTextInnerText : setTextTextContent;
})();
那请问该功能检测一次,并返回一个函数的任何半体面的发动机将内联为您服务。或者,如果您希望将邮件中的HTML标记作为标记(而不是文本文本)处理,则可以使用innerHTML
(这在浏览器中是一致的)。但是,如果您使用innerHTML
,则会处理标记,但这可能不是您想要的。
我发现它很有用好JavaScript库来处理这些浏览器的差异(和提供有用的进一步功能的吨),如jQuery,YUI,Closure,或any of several others。很明显,如果没有一个图书馆,你无法做到这一点,这只是一个站在已经完成了大量工作的人肩上的问题。 :-)
在这种情况下,例如,使用jQuery上面会:
$("#d").text("new text");
就是这样。
为什么不把第二个解决方案放入一个函数中,该函数带有一个元素参数和一个字符串参数。那么你只需要执行'setText(mydiv,“new text”);' – 2012-07-25 09:17:28
它不是'document.getElementByid'它应该是'document.getElementById'''''''应该是大写的。 – 2012-07-25 09:29:58
'd [('d'中的'innerText')? 'innerText':'textContent'] ='新文字';' – 2017-08-24 18:25:42