В чем разница между 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>