Разница между innerText и innerHTML

В чем разница между innerHTML, innerText и childNodes[].value в JavaScript?

Ответ 1

В отличие от innerText, однако, innerHTML позволяет работать с форматированным текстом HTML и не выполняет автоматическое кодирование и декодирование текста. Другими словами, innerText извлекает и устанавливает содержимое тега в виде простого текста, тогда как innerHTML извлекает и устанавливает содержимое в формате HTML.

Ответ 2

Приведенные ниже примеры относятся к следующему фрагменту 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 был представлен Microsoft и некоторое время не поддерживался Firefox. В августе 2016 года WHATWG утвердила innerText и добавила его в Firefox версии 45.
  • innerText дает вам представление текста, которое пытается соответствовать тому, что отображается браузером, это означает:
    • innerText применяет правила text-transform и white-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 возвращает объект HTMLDivElement, для которого не определено свойство value.

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>

Ответ 3

InnerText html-кодирует контент, превращая <p> в &lt;p&gt; и т.д. Если вы хотите вставить теги HTML, вам нужно использовать InnerHTML.

Ответ 4

Простыми словами:

  1. innerText покажет значение как есть и проигнорирует любое форматирование HTML которое может быть включено.
  2. innerHTML покажет значение и применит любое форматирование HTML.

Ответ 5

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

С точки зрения MutationObservers, установка innerHTML генерирует мутацию childList из-за того, что браузеры удаляют узел, а затем добавляют новый узел со значением innerHTML.

Если вы установите innerText, генерируется мутация characterData.

Ответ 7

InnerText будет возвращать только текстовое значение страницы с каждым элементом на новой строке в виде простого текста, в то время как innerHTML вернет HTML-содержимое всего, что находится внутри тега body, а childNodes вернет список узлов, как следует из названия.

Ответ 8

Свойство 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>