如果我有一个跨度,就说:
<span id="myspan"> hereismytext </span>
我如何使用JavaScript将“hereismytext”更改为“newtext”?
对于现代浏览器,您应该使用:
document.getElementById("myspan").textContent="newtext";
虽然较旧的浏览器可能不知道textContent
,但不建议使用innerHTML
,因为当用户输入新文本时,它会引入XSS漏洞(有关更详细的讨论,请参阅下面的其他答案):
//POSSIBLY INSECURE IF NEWTEXT BECOMES A VARIABLE!!
document.getElementById("myspan").innerHTML="newtext";
因此不推荐使用innerHTML。相反,您应该创建一个TextNode。这样,您就“绑定”了您的文本,至少在这种情况下,您不会受到XSS攻击。
document.getElementById("myspan").innerHTML = "sometext"; //INSECURE!!
正道:
span = document.getElementById("myspan");
txt = document.createTextNode("your cool text");
span.appendChild(txt);
有关此漏洞的详细信息:跨站点脚本(XSS)-OWASP
编辑于2017年11月4日:
根据@mumush的建议修改了第三行代码:“use appendChild();insteed”。
顺便说一句,根据@Jimbo Jonny,我认为通过应用层安全原则,所有内容都应该被视为用户输入。这样你就不会遇到什么惊喜了。