如果我有一个跨度,请说:
<span id="myspan"> hereismytext </span>
如何使用JavaScript将“hereismytext”更改为“newtext”?
答案 0 :(得分:533)
对于现代浏览器,您应该使用:
document.getElementById("myspan").textContent="newtext";
虽然较旧的浏览器可能不知道textContent
,但建议不要使用innerHTML
,因为当新文本是用户输入时,它会引入XSS易受攻击性(有关更详细的讨论,请参阅下面的其他答案) :
//POSSIBLY INSECURE IF NEWTEXT BECOMES A VARIABLE!!
document.getElementById("myspan").innerHTML="newtext";
答案 1 :(得分:63)
使用 innerHTML SO NOT WOMOMENDED 。 相反,您应该创建一个textNode。这样,你就是&#34;绑定&#34;你的文字,至少在这种情况下你不容易受到XSS攻击。
document.getElementById("myspan").innerHTML = "sometext"; //INSECURE!!
正确的方式:
span = document.getElementById("myspan");
txt = document.createTextNode("your cool text");
span.appendChild(txt);
有关此漏洞的更多信息: Cross Site Scripting (XSS) - OWASP
2017年4月4日编辑:
根据@mumush建议修改第三行代码:&#34;使用appendChild();代替&#34 ;.
顺便说一句,根据@Jimbo Jonny我认为应该通过应用层次安全原则将所有内容视为用户输入。这样你就不会遇到任何意外。
答案 2 :(得分:28)
document.getElementById('myspan').innerHTML = 'newtext';
答案 3 :(得分:21)
编辑:这是写于2014年。您可能不再关心IE8,可能会忘记使用innerText
。只需使用textContent
并完成它,万岁。
如果您是提供文本的人,并且文本的任何部分都不是由用户提供的(或者您不能控制的其他来源),那么设置innerHTML
可能是可以接受的:
// * Fine for hardcoded text strings like this one or strings you otherwise
// control.
// * Not OK for user-supplied input or strings you don't control unless
// you know what you are doing and have sanitized the string first.
document.getElementById('myspan').innerHTML = 'newtext';
但是,正如其他人所说,如果您不是文本字符串任何部分的来源,使用innerHTML
会使您受到XSS等内容注入攻击,如果您不小心正确消毒先发短信。
如果您使用的是用户的输入,这里有一种安全的方法,同时还可以保持跨浏览器的兼容性:
var span = document.getElementById('myspan');
span.innerText = span.textContent = 'newtext';
Firefox不支持innerText
,IE8不支持textContent
,因此如果您想维护跨浏览器的兼容性,则需要同时使用这两者。
如果你想尽可能避免回流(由innerText
引起):
var span = document.getElementById('myspan');
if ('textContent' in span) {
span.textContent = 'newtext';
} else {
span.innerText = 'newtext';
}
答案 4 :(得分:11)
我使用Jquery
并且以上都没有帮助,我不知道为什么但是这有效:
$("#span_id").text("new_value");
答案 5 :(得分:7)
这是另一种方式:
var myspan = document.getElementById('myspan');
if (myspan.innerText) {
myspan.innerText = "newtext";
}
else
if (myspan.textContent) {
myspan.textContent = "newtext";
}
Safari,Google Chrome和MSIE将检测innerText属性。对于Firefox,标准的处理方式是使用textContent,但是从版本45开始它也有一个innerText属性,最近有人向我通报了。此解决方案测试浏览器是否支持这些属性中的任何一个,如果支持,则分配“newtext”。
现场演示:here
答案 6 :(得分:1)
除了上述纯JavaScript答案外,您还可以使用jQuery text 方法,如下所示:
$('#myspan').text('newtext');
如果您需要扩展答案以获取/更改span或div元素的 html 内容,则可以执行以下操作:
$('#mydiv').html('<strong>new text</strong>');
参考:
.text():http://api.jquery.com/text/
.html():http://api.jquery.com/html/
答案 7 :(得分:1)
您还可以使用querySelector()方法,假设“ myspan” ID是唯一的,因为该方法返回具有指定选择器的第一个元素:
document.querySelector('#myspan').textContent = 'newtext';
答案 8 :(得分:0)
与其他答案一样,不建议使用 innerHTML 和 innerText ,最好使用 textContent 。这个属性得到很好的支持,你可以检查一下: http://caniuse.com/#search=textContent
答案 9 :(得分:0)
document.getElementById("myspan").textContent="newtext";
这将选择ID为myspan
的dom节点,并将其文本内容更改为new text
答案 10 :(得分:0)
您可以
document.querySelector("[Span]").textContent = "content_to_display";
答案 11 :(得分:0)
(function ($) {
$(document).ready(function(){
$("#myspan").text("This is span");
});
}(jQuery));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span id="myspan"> hereismytext </span>
用户text()
更改跨度文本。
答案 12 :(得分:0)
我用了这个document.querySelector('ElementClass').innerText = 'newtext';
似乎适用于跨度,类/按钮中的文本
答案 13 :(得分:0)
出于某种原因,使用“text”属性似乎是大多数浏览器的首选。 它对我有用
$("#span_id").text("要分配的文本值");
答案 14 :(得分:-1)
这个范围
<span id="name">sdfsdf</span>
你可以这样: -
$("name").firstChild.nodeValue = "Hello" + "World";