Просмотр полной версии : innerText или textContent
Добрый день, подскажите пожалуйста какое свойство лучше использовать для доступа к значениям ячеек таблицы? Оба работают одинаково, на первый взгляд, но в чем их отличие?
danik.js
19.02.2013, 15:39
textContent отсутствует в IE8-
свойство innerText не описано в спецификации (однако возможно в будущем это изменится), его нет в FireFox, и поведение отличается тем, что все <br> конвертируются в конец строки.
подскажите пожалуйста какое свойство лучше использовать для доступа к значениям ячеек таблицы?
innnerHTML...
День добрый... столкнулся с проблемой...
Есть код:
<SMALL>
<BR>Состояние обновления<br> <B>Данные обновлены <br>21 ч. 58 мин. назад.</B>
</SMALL>
Хочу вытащить текст...
Делаю:
var textTMP = document.getElementsByTagName('SMALL')[0].innerHTML;
alert(textTMP);
выдает:
"<BR>Состояние обновления<br> <B>Данные обновлены <br>21 ч. 58 мин. назад.</B>"
Делаю:
var textTMP = document.getElementsByTagName('SMALL')[0].innerText;
или
var textTMP = document.getElementsByTagName('SMALL')[0].textContent;
Выдает: "undefined"
Браузер Мозила
danik.js
23.03.2013, 05:47
Согласно этой (http://www.quirksmode.org/dom/w3c_html.html) таблице, в Fifefox это свойство точно есть начиная с третьей версии.
<!DOCTYPE html>
<SMALL>
<BR>Состояние обновления<br> <B>Данные обновлены <br>21 ч. 58 мин. назад.</B>
</SMALL>
<script>
var textTMP = document.getElementsByTagName('SMALL')[0].textContent;
alert(textTMP);
</script>
innerText в разы быстрее обновляет текстовые узлы чем textContent и innerHTML
Яростный Меч
06.09.2013, 22:45
innerText в разы быстрее обновляет текстовые узлы чем textContent и innerHTML
насчет innerHTML - понятно почему, а textContent по идее должен работать так же.
если важна скорость - попробуй ещё такой вариант:
var fc = node.firstChild;
(fc ? (fc.data = "text") : node.appendChild(document.createTextNode("text"));
это предполагает, что кроме текста никаких элементов в ячейках не будет.
насчет innerHTML - понятно почему, а textContent по идее должен работать так же.
согласен но вот тесты показывают обратное
http://jsperf.com/innertext-vs-textcontent-complette
браузер Chrome 29.0.1547.66
если важна скорость - попробуй ещё такой вариант:
var fc = node.firstChild;
(fc ? (fc.data = "text") : node.appendChild(document.createTextNode("text"));
это предполагает, что кроме текста никаких элементов в ячейках не будет.
Это все понятно но меня интересует именно скорость обновления уже имеющих текстовых узлов.
Яростный Меч
07.09.2013, 04:01
обновления уже имеющих текстовых узлов.
тем более, даже проще:
td.firstChild.data = "new value";
где td - ссылка на ячейку таблицы, содержащую текст.
danik.js
07.09.2013, 06:44
насчет innerHTML - понятно почему, а textContent по идее должен работать так же.
Поковырялся в исходниках WebKit. Оказывается при установке textContent все дочерние элементы удаляются и создается новая текстовая нода, а при установке innerText если элемент содержит одну текстовую ноду, то просто устанавливается новое содержимое для нее.
Наглядно:
var container = document.createElement('div');
var childTextNode = container.appendChild(document.createTextNode('111 '));
container.innerText = '222';
alert([childTextNode.data, childTextNode === container.firstChild]); // выдаст 222, а не 111
container.textContent = '333'
alert([childTextNode.data, childTextNode === container.firstChild]); // выдаст 222, false
Если текст будет содержать переносы или изначально нода будет содержать более одной ноды, то тесты могут дать другие результаты.
Яростный Меч
07.09.2013, 15:21
Ага, спасибо.
Тогда, видимо, лучше всего напрямую менять значение текстовой ноды. И кроссбраузерно, и гарантировано быстрый вариант.
разница в скорости очень маленькая, но все равно спасибо за совет.
http://jsperf.com/innertext-vs-textcontent-complette/3
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot