В чем разница между innerHTML
, innerText
и childNodes[].value
в JavaScript?
Разница между innerText и innerHTML
Ответ 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>
в <p>
и т.д. Если вы хотите вставить теги HTML, вам нужно использовать InnerHTML
.
Ответ 4
Простыми словами:
-
innerText
покажет значение как есть и проигнорирует любое форматированиеHTML
которое может быть включено. -
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>