Способы установки / получения значения textNode
Есть много способов получить / изменить значение текстового узла:
- Это не
textnode.value
XUL- единственная вещь textContent
[ mdn ] не поддерживается до IE9data
наследуетсяText
отCharacterData
интерфейсnodeValue
[ MDN ] изNode
интерфейс
Я склонен использовать .data
, Какой из них рекомендуется - они все возвращают то же самое?
1 ответ
Если у вас есть TEXT_NODE [тип 3] textContent вернет nodeValue ( MDN):
Если узел является разделом CDATA, комментарием, инструкцией обработки или текстовым узлом, textContent возвращает текст внутри этого узла (nodeValue).
CharacterData - это то же самое, что и nodeValue для текстовых узлов ( MDN).
Text, Comment и CDATASection реализуют CharacterData, который, в свою очередь, также реализует Node.
Для текстовых узлов они одинаковы.
jQuery (Sizzle) использует nodeValue:
/**
* Utility function for retreiving the text value of an array of DOM nodes
* @param {Array|Element} elem
*/
var getText = Sizzle.getText = function( elem ) {
...
if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
// Use textContent || innerText for elements
if ( typeof elem.textContent === 'string' ) {
return elem.textContent;
} else if ( typeof elem.innerText === 'string' ) {
// Replace IE's carriage returns
return elem.innerText.replace( rReturn, '' );
}
...
// TEXT_NODE
} else if ( nodeType === 3 || nodeType === 4 ) {
return elem.nodeValue;
}
return ret;
};
Так что использование данных - это нормально, но textContent только для IE9+ и немного медленнее.