В чем разница между textContent
и innerText
в JavaScript?
Могу ли я использовать textContent
следующим образом:
var logo$ = document.getElementsByClassName('logo')[0];
logo$.textContent = "Example";
В чем разница между textContent
и innerText
в JavaScript?
Могу ли я использовать textContent
следующим образом:
var logo$ = document.getElementsByClassName('logo')[0];
logo$.textContent = "Example";
innerText
иtextContent
решительно не то же самое. Наличие пробелов в содержимом узла приведет к тому, что два свойства приведут к разному содержимому, а также к появлениюbr
элементов и других отрисованных потомков уровня блока.Ответы:
Ни один из других ответов не дает полного объяснения, отсюда и этот. Ключевые отличия
innerText
иtextContent
очень хорошо изложены в блоге Келли Нортон: innerText vs. textContent . Ниже вы можете найти резюме:innerText
был нестандартным, хотяtextContent
был стандартизирован ранее.innerText
возвращает видимый текст , содержащийся в узле, аtextContent
возвращает полный текст. Например, на следующий HTML<span>Hello <span style="display: none;">World</span></span>
,innerText
будет возвращать «Hello», в то время какtextContent
будет возвращать «Hello World». Более полный список различий см. В таблице по адресу http://perfectionkills.com/the-poor-misunderstood-innerText/ (дальнейшее чтение в разделе innerText работает в IE, но не в Firefox ).innerText
это значительно повышает производительность: для получения результата требуется информация макета.innerText
определяется только дляHTMLElement
объектов, аtextContent
определяется для всехNode
объектов.Обходной путь для
textContent
IE8 - будет включать рекурсивную функцию, использующуюnodeValue
всеchildNodes
указанные узлы, вот попытка polyfill:источник
innerText
превратит<br>
элементы в символы новой строки, аtextContent
просто проигнорирует их. Таким образом, 2 слова с одним<br>
элементом между ними (и без пробелов) будут объединены при использованииtextContent
elem.textContent = 'foobar'
противelem.innerText = 'foobar'
innerText
иtextContent
: Если вы изменитеtext-transform
элемент с помощью CSS, это повлияет на результат 'innerText', но не на результатtextContent
. Например:innerText
of<div style="text-transform: uppercase;">Hello World</div>
будет HELLO WORLD, аtextContent
Hello World.textContent
единственный доступный для текстовых узлов:В узлах элементов
innerText
оценивает <br> элементы, а такжеtextContent
оценивает управляющие символы:span.innerText
дает:span.textContent
дает:Строки с управляющими символами (например, переводы строки) недоступны
textContent
, если для содержимого задано значениеinnerText
. Другой способ (символы набора управления сtextContent
), все персонажи возвращаются как сinnerText
иtextContent
:источник
Оба
innerText
&textContent
стандартизированы по состоянию на 2016 год. ВсеNode
объекты (включая узлы чистого текста) имеютtextContent
, но толькоHTMLElement
объекты имеютinnerText
.Хотя
textContent
работает с большинством браузеров, он не работает на IE8 или более ранних версиях. Используйте этот polyfill, чтобы он работал только в IE8. Этот polyfill не будет работать с IE7 или ранее.Этот
Object.defineProperty
метод доступен в IE9 или более поздней версии, однако он доступен в IE8 только для объектов DOM.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent
источник
innerText
ваш друг.Object.defineProperty()
?Для тех, кто гуглил этот вопрос и приехал сюда. Я чувствую, что наиболее ясный ответ на этот вопрос находится в документе MDN: https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent .
Вы можете забыть все моменты, которые могут вас смущать, но помните 2 вещи:
textContent
обычно это свойство, которое вы ищете.innerText
приближается к тексту, который получит пользователь, если он выделит содержимое элемента курсором, а затем скопирует в буфер обмена. ИtextContent
дает вам все, видимое или скрытое, в том числе<script>
и<style>
элементы.источник
textContent поддерживается большинством браузеров. Он не поддерживается ie8 или более ранней версией, но для этого можно использовать polyfill
См. Http://www.w3schools.com/jsref/prop_node_textcontent.asp
источник
textContent возвращает полный текст и не заботится о видимости, в то время как innerText делает.
Вывод textContent:
Вывод innerText (обратите внимание, как innerText знает о тегах, например
<br>
, и игнорирует скрытый элемент):источник
Помимо всех различий, которые были названы в других ответах, вот еще одно, которое я обнаружил только недавно:
Хотя
innerText
говорят, что это свойство стандартизировано с 2016 года, оно демонстрирует различия между браузерами: Mozilla игнорирует символы U + 200E и U + 200F («lrm» и «rlm»)innerText
, а Chrome - нет.Firefox сообщает 3 и 2, Chrome сообщает 3 и 3.
Еще не уверен, является ли это ошибкой (и если да, то в каком браузере) или просто одной из тех странных несовместимостей, с которыми нам приходится мириться.
источник
innerHTML будет выполнять даже теги HTML, которые могут быть опасными, вызывая любые атаки на стороне клиента, такие как XSS на основе DOM. Вот фрагмент кода:
Если вы используете .textContent, он не будет оценивать теги HTML и печатать его как строку.
Ссылка: https://www.scip.ch/en/?labs.20171214
источник