innerText,innerHTML和value之间的区别?

2022-08-29 23:56:38

和 JavaScript 中的有什么区别?innerHTMLinnerTextvalue


答案 1

以下示例引用了以下 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由微软推出,有一段时间不受Firefox支持。2016年8月,被WHATWG采用,并在v45中被添加到Firefox中。innerText
  • 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

这取决于您定位到的元素。对于上面的示例,返回一个 HTMLDivElement 对象,该对象未定义属性。xvalue

x.value // => null

例如,输入标记 () 定义了一个 value 属性,该属性引用“控件中的当前值”。<input />

<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>

答案 2

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