Os exemplos abaixo se referem ao seguinte snippet HTML:
<div id="test">
Warning: This element contains <code>code</code> and <strong>strong language</strong>.
</div>
O nó será referenciado pelo seguinte JavaScript:
var x = document.getElementById('test');
element.innerHTML
Define ou obtém a sintaxe HTML que descreve os descendentes do elemento
x.innerHTML
// => "
// => Warning: This element contains <code>code</code> and <strong>strong language</strong>.
// => "
Isso faz parte da especificação de análise e serialização de DOM do W3C . Observe que é uma propriedade dos Element
objetos.
node.innerText
Define ou obtém o texto entre as tags de início e fim do objeto
x.innerText
// => "Warning: This element contains code and strong language."
innerText
foi introduzido pela Microsoft e por um tempo não foi suportado pelo Firefox. Em agosto de 2016, innerText
foi adotado pelo WHATWG e adicionado ao Firefox na v45.
innerText
fornece uma representação sensível ao estilo do texto que tenta corresponder ao que é renderizado pelo navegador, o que significa:
innerText
aplica text-transform
e white-space
regras
innerText
apara o espaço em branco entre as linhas e adiciona quebras de linha entre os itens
innerText
não retornará texto para itens invisíveis
innerText
retornará textContent
para elementos que nunca são renderizados como <style />
e `
- Propriedade dos
Node
elementos
node.textContent
Obtém ou define o conteúdo do texto de um nó e seus descendentes.
x.textContent
// => "
// => Warning: This element contains code and strong language.
// => "
Embora este seja um padrão W3C , ele não é suportado pelo IE <9.
- Não tem conhecimento de estilo e, portanto, retornará conteúdo oculto por CSS
- Não aciona um reflow (portanto, mais eficiente)
- Propriedade dos
Node
elementos
node.value
Este depende do elemento que você segmentou. Para o exemplo acima, x
retorna um objeto HTMLDivElement , que não possui uma value
propriedade definida.
x.value // => null
Tags de entrada ( <input />
), por exemplo, definem uma value
propriedade , que se refere ao "valor atual no controle".
<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>
Dos documentos :
Nota: para certos tipos de entrada, o valor retornado pode não corresponder ao valor digitado pelo usuário. Por exemplo, se o usuário digitar um valor não numérico em um <input type="number">
, o valor retornado poderá ser uma sequência vazia.
Script de exemplo
Aqui está um exemplo que mostra a saída para o HTML apresentado acima:
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>
innerText
uma implementação não padrão do textContext by MSIE não é trivial.