JavaScript中innerHTML
,innerText
和childNodes[].value
之间有什么区别?
答案 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月,innerText
为adopted by the WHATWG,并已在第45版中添加到Firefox。innerText
为您提供了一种样式感知的文本表示,它试图匹配浏览器呈现的内容,这意味着:
innerText
适用text-transform
和white-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。
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>
转为<p>
等。如果要插入HTML标记,则需要使用InnerHTML
。
答案 3 :(得分:7)
简单来说:
innerText
将按原样显示该值,并忽略可能的任何HTML
格式
包括在内。innerHTML
将显示该值并应用任何HTML
格式。答案 4 :(得分:5)
innerText
和innerHTML
之间的唯一区别是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富文本格式,并且不会自动对文本进行编码和解码。