innerText和innerHTML之间的区别

时间:2013-09-26 14:16:05

标签: javascript dom

JavaScript中innerHTMLinnerTextchildNodes[].value之间有什么区别?

11 个答案:

答案 0 :(得分:233)

以下示例引用了以下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

Sets or gets the HTML syntax describing the element's descendants

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

这是W3C DOM Parsing and Serialization Specification的一部分。请注意,它是Element个对象的属性。


node.innerText

Sets or gets the text between the start and end tags of the object

x.innerText
// => "Warning: This element contains code and strong language."
  • innerText由微软推出,有一段时间没有得到Firefox的支持。 2016年8月,innerTextadopted by the WHATWG,并已在第45版中添加到Firefox。
  • innerText为您提供了一种样式感知的文本表示,它试图匹配浏览器呈现的内容,这意味着:
    • innerText适用text-transformwhite-space规则
    • innerText修剪线条之间的空白区域,并在项目之间添加换行符
    • innerText不会返回不可见项目的文字
  • innerText将返回textContent表示永远不会呈现为<style />和“
  • 的元素
  • Node元素的属性


node.textContent

Gets or sets the text content of a node and its descendants.

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

虽然这是W3C standard,但IE&lt;不支持它。 9。

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


node.value

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

x.value // => null

输入标记(<input />),例如,执行define a value property,它指的是“控件中的当前值”。

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

来自docs

  

注意:对于某些输入类型,返回的值可能与   用户输入的值。例如,如果用户输入   非数字值转换为<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>

答案 1 :(得分:122)

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

答案 2 :(得分:18)

InnerText属性对内容进行html编码,将<p>转为&lt;p&gt;等。如果要插入HTML标记,则需要使用InnerHTML

答案 3 :(得分:7)

简单来说:

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

答案 4 :(得分:5)

innerTextinnerHTML之间的唯一区别是innerText将字符串原样插入元素,而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;
}
<h3>Inner text below. It inject string as it is into the element.</h3>
<div id="innertext"></div>
<br />
<h3>Inner html below. It renders the string into the element and treat as part of html document.</h3>
<div id="innerhtml"></div>

答案 5 :(得分: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);

答案 6 :(得分:2)

MutationObservers而言,由于浏览器删除了节点,然后添加了值为innerHTML的新节点,因此设置childList会生成innerHTML突变。

如果设置innerText,则会生成characterData突变。

答案 7 :(得分:1)

InnerText只返回页面的文本值,其中每个元素都以明文形式换行,而innerHTML将返回body标记内所有内容的HTML内容,并且childNodes将返回一个节点列表,顾名思义。

答案 8 :(得分:0)

innerText属性返回html元素的实际文本值,而innerHTML返回HTML 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>

答案 9 :(得分:0)

要添加到列表中,innerText将保持文本转换,innerHTML不会

答案 10 :(得分:0)

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