301

和在 JavaScript 中innerHTML有什么区别?innerTextvalue

4

12 回答 12

288

下面的示例引用了以下 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 Parsing and Serialization Specification的一部分。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返回一个没有定义属性的HTMLDivElementvalue对象。

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>

于 2013-09-26T15:11:11.577 回答
183

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

于 2013-09-26T14:20:59.927 回答
27

InnerText属性 html-encodes 内容,转向<p>&lt;p&gt;。如果要插入 HTML 标签,则需要使用InnerHTML.

于 2013-09-26T14:20:46.737 回答
15

简单来说:

  1. innerText将按原样显示值并忽略HTML可能包含的任何格式。
  2. innerHTML将显示该值并应用任何HTML格式。
于 2017-11-22T04:55:53.677 回答
10

两者都innerText返回HTML 元素的innerHTML 内部部分

之间的唯一区别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>

于 2020-01-26T06:24:03.417 回答
3
var element = document.getElementById("main");
var values = element.childNodes[1].innerText;
alert('the value is:' + values);

例如,要进一步完善它并检索值 Alec,请使用另一个 .childNodes[1]

var element = document.getElementById("main");
var values = element.childNodes[1].childNodes[1].innerText;
alert('the value is:' + values);
于 2013-09-26T14:27:17.187 回答
2

innerText属性将文本内容设置或返回为指定节点及其所有后代的纯文本,而该innerHTML属性获取并设置元素中的纯文本或 HTML 内容。与 不同innerTextinnerHTML允许您使用 HTML 富文本,并且不会自动对文本进行编码和解码。

于 2020-09-07T19:22:47.110 回答
2

就 而言MutationObservers,设置会由于浏览器删除节点然后添加一个值为 的新节点而innerHTML产生突变。childListinnerHTML

如果设置innerTextcharacterData则会生成一个突变。

于 2017-04-08T11:10:56.647 回答
1

InnerText只会返回页面的文本值,每个元素都以纯文本换行,而将返回标签innerHTML内所有内容的 HTML 内容,并将返回节点列表,顾名思义。bodychildNodes

于 2013-09-26T14:23:10.727 回答
1

innerText属性返回 html 元素的实际文本值,而. 下面的例子:innerHTMLHTML content

var element = document.getElementById('hello');
element.innerText = '<strong> hello world </strong>';
console.log('The innerText property will not parse the html tags as html tags but as normal text:\n' + element.innerText);

console.log('The innerHTML element property will encode the html tags found inside the text of the element:\n' + element.innerHTML);
element.innerHTML = '<strong> hello world </strong>';
console.log('The <strong> tag we put above has been parsed using the innerHTML property so the .innerText will not show them \n ' + element.innerText);
console.log(element.innerHTML);
<p id="hello"> Hello world 
</p>

于 2019-04-06T16:10:40.703 回答
1

要添加到列表中,innerText将保留您的text-transforminnerHTML不会。

于 2020-02-04T19:28:01.777 回答
0

innerhtml 将应用 html 代码

innertext 会将内容作为文本放置,因此如果您有 html 标签,它将仅显示为文本

于 2021-12-11T22:10:51.563 回答