设置/获取文本节点值的方法

Ways of setting/getting a textNode's value

本文关键字:方法 节点 取文本 获取 设置      更新时间:2023-09-26
有很多

方法可以检索/更改文本节点的值:

  • 这不是textnode.value,只有XUL的东西
  • textContent [mdn] 在 IE9 之前不受支持
  • data ,由TextCharacterData接口继承
  • nodeValue [mdn]Node接口

我倾向于使用.data.推荐哪一个 - 它们都返回相同?

如果你有 [类型 3] textContent TEXT_NODE将返回 nodeValue (MDN):

如果节点是 CDATA 部分、注释、处理指令、 或文本节点,textContent 返回此节点内的文本( 节点值)。

CharacterData 与文本节点 (MDN) 的 nodeValue 相同。

文本、注释和 CDATASection 都实现了 CharacterData,它们在 turn 还实现了 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+,而且速度有点慢。