Способы установки / получения значения textNode

Есть много способов получить / изменить значение текстового узла:

  • Это не textnode.value XUL- единственная вещь
  • textContent [ mdn ] не поддерживается до IE9
  • data наследуется 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+ и немного медленнее.

Другие вопросы по тегам