Вход

Просмотр полной версии : innerText или textContent


simple
19.02.2013, 15:00
Добрый день, подскажите пожалуйста какое свойство лучше использовать для доступа к значениям ячеек таблицы? Оба работают одинаково, на первый взгляд, но в чем их отличие?

danik.js
19.02.2013, 15:39
textContent отсутствует в IE8-
свойство innerText не описано в спецификации (однако возможно в будущем это изменится), его нет в FireFox, и поведение отличается тем, что все <br> конвертируются в конец строки.

ksa
19.02.2013, 16:48
подскажите пожалуйста какое свойство лучше использовать для доступа к значениям ячеек таблицы?
innnerHTML...

Benos
22.03.2013, 23:59
День добрый... столкнулся с проблемой...
Есть код:
<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>

simple
06.09.2013, 22:24
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"));


это предполагает, что кроме текста никаких элементов в ячейках не будет.

simple
06.09.2013, 23:05
насчет innerHTML - понятно почему, а textContent по идее должен работать так же.

согласен но вот тесты показывают обратное

http://jsperf.com/innertext-vs-textcontent-complette

браузер Chrome 29.0.1547.66

simple
06.09.2013, 23:07
если важна скорость - попробуй ещё такой вариант:
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
Ага, спасибо.
Тогда, видимо, лучше всего напрямую менять значение текстовой ноды. И кроссбраузерно, и гарантировано быстрый вариант.

simple
07.09.2013, 22:55
разница в скорости очень маленькая, но все равно спасибо за совет.
http://jsperf.com/innertext-vs-textcontent-complette/3