innerText、innerHTML 和 value 之间的区别?

IT技术 javascript dom innerhtml innertext
2021-02-04 22:33:44

JavaScript 中的innerHTML,innerText和 有什么区别value

6个回答

以下示例引用了以下 HTML 代码段:

<div id="test">
   Warning: This element contains <code>code</code> and <strong>strong language</strong>.
</div>

该节点将由以下 JavaScript 引用:

var x = document.getElementById('test');


element.innerHTML

设置或获取描述元素后代的 HTML 语法

x.innerHTML
// => "
// =>   Warning: This element contains <code>code</code> and <strong>strong language</strong>.
// => "

这是 W3C 的DOM 解析和序列化规范的一部分请注意,它是Element对象的属性


node.innerText

设置或获取对象的开始和结束标记之间的文本

x.innerText
// => "Warning: This element contains code and strong language."
  • innerText由 Microsoft 推出,有一段时间不受 Firefox 支持。2016 年 8 月,innerTextWHATWG 采用,并在 v45 中添加到 Firefox。
  • innerText 为您提供风格感知的文本表示,尝试匹配浏览器呈现的内容,这意味着:
    • innerText适用text-transformwhite-space规则
    • innerText 修剪行之间的空白并在项目之间添加换行符
    • innerText 不会返回不可见项目的文本
  • innerText将返回textContent从未渲染过的元素<style />和 `
  • Node元素属性


node.textContent

获取或设置节点及其后代的文本内容。

x.textContent
// => "
// =>   Warning: This element contains code and strong language.
// => "

虽然这是W3C 标准,但 IE < 9 不支持。

  • 不知道样式,因此将返回由 CSS 隐藏的内容
  • 不触发回流(因此性能更高)
  • Node元素属性


node.value

这取决于您所针对的元素。对于上面的示例,x返回一个没有定义属性HTMLDivElement对象value

x.value // => null

<input />例如,输入标签 ( ) 确实定义了一个value属性,它指的是“控件中的当前值”。

<input id="example-input" type="text" value="default" />
<script>
  document.getElementById('example-input').value //=> "default"
  // User changes input to "something"
  document.getElementById('example-input').value //=> "something"
</script>

文档

注意:对于某些输入类型,返回值可能与用户输入的值不匹配。例如,如果用户在 中输入非数字值<input type="number">,则返回值可能是空字符串。


示例脚本

下面是一个示例,它显示了上述 HTML 的输出:

var properties = ['innerHTML', 'innerText', 'textContent', 'value'];

// Writes to textarea#output and console
function log(obj) {
  console.log(obj);
  var currValue = document.getElementById('output').value;
  document.getElementById('output').value = (currValue ? currValue + '\n' : '') + obj; 
}

// Logs property as [propName]value[/propertyName]
function logProperty(obj, property) {
  var value = obj[property];
  log('[' + property + ']'  +  value + '[/' + property + ']');
}

// Main
log('=============== ' + properties.join(' ') + ' ===============');
for (var i = 0; i < properties.length; i++) {
  logProperty(document.getElementById('test'), properties[i]);
}
<div id="test">
  Warning: This element contains <code>code</code> and <strong>strong language</strong>.
</div>
<textarea id="output" rows="12" cols="80" style="font-family: monospace;"></textarea>

将四个属性(innerHTML、innerText、textContent、value)中的每一个都分成两个子标题:“get”行为和“set”行为会很有帮助。
2021-03-17 22:33:44
2021-03-22 22:33:44
即使是最新版本的 Firefox 也不支持innerTextquirksmode.org/dom/htmlquirksmode.org/dom/tests/innerhtml.html
2021-04-01 22:33:44
它还转换&lt;<&gt;>等。
2021-04-05 22:33:44
如果我正确理解了MDNinnerText它现在是标准的一部分,Firefox 从 45 版开始应该支持;也许是更新这个很棒的答案@faraz的原因
2021-04-09 22:33:44

innerText但是,与 不同的是,它innerHTML允许您使用 HTML 富文本,并且不会自动编码和解码文本。换句话说,innerText检索和设置标签的内容为纯文本,而innerHTML检索和设置内容为HTML格式。

将此处粘贴在接受的答案@jor 的评论中非常重要,这是另一个答案:“只是为了清楚起见:这仅适用于设置值时。当您获取值时,HTML 标签将被简单地剥离,您将获得纯文本。”
2021-03-21 22:33:44

InnerText物业HTML编码的内容,转向<p>&lt;p&gt;等,如果你想插入你需要使用HTML标签InnerHTML

只是为了清楚:这仅适用于设置值时。当您获取值时,HTML 标签被简单地剥离,您将获得纯文本。
2021-03-10 22:33:44

简单来说:

  1. innerText将按原样显示值并忽略HTML可能包含的任何格式。
  2. innerHTML将显示值并应用任何HTML格式。

双方innerTextinnerHTML 返回内部部件的HTML元素。

之间innerTextinnerHTML唯一区别是:innerText将 HTML 元素(整个代码)作为字符串返回并在屏幕上显示 HTML 元素(作为 HTML 代码),而innerHTML仅返回 HTML 元素的文本内容。

查看下面的示例以更好地理解。运行下面的代码。

const ourstring = 'My name is <b class="name">Satish chandra Gupta</b>.';
document.getElementById('innertext').innerText = ourstring;
document.getElementById('innerhtml').innerHTML = ourstring;
.name {
    color:red;
}
<p><b>Inner text below. It inject string as it is into the element.</b></p>
<p id="innertext"></p>
<br>
<p><b>Inner html below. It renders the string into the element and treat as part of html document.</b></p>
<p id="innerhtml"></p>