亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用jQuery選擇文本節點?

如何使用jQuery選擇文本節點?

楊__羊羊 2019-05-27 16:28:59
如何使用jQuery選擇文本節點?我想得到一個元素的所有后代文本節點,作為jQuery集合。最好的方法是什么?
查看完整描述

4 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

jQuery沒有這方面的便利功能。您需要組合contents(),它將只提供子節點但包含文本節點find(),它提供所有后代元素但不提供文本節點。這是我想出的:

var getTextNodesIn = function(el) {
    return $(el).find(":not(iframe)").addBack().contents().filter(function() {
        return this.nodeType == 3;
    });};getTextNodesIn(el);

注意:如果您使用的是jQuery 1.7或更早版本,則上述代碼將無效。為了解決這個問題,更換addBack()andSelf()。andSelf()不贊成addBack()從1.8開始。

與純DOM方法相比,這有點低效,并且必須包含一個丑陋的解決方法,用于jQuery的contents()函數重載(感謝注釋中的@rabidsnail指出),所以這里是使用簡單遞歸函數的非jQuery解決方案。該includeWhitespaceNodes參數控制是否在輸出中包含空白文本節點(在jQuery中它們被自動過濾掉)。

更新:修復includeWhitespaceNodes為假時的錯誤。

function getTextNodesIn(node, includeWhitespaceNodes) {
    var textNodes = [], nonWhitespaceMatcher = /\S/;

    function getTextNodes(node) {
        if (node.nodeType == 3) {
            if (includeWhitespaceNodes || nonWhitespaceMatcher.test(node.nodeValue)) {
                textNodes.push(node);
            }
        } else {
            for (var i = 0, len = node.childNodes.length; i < len; ++i) {
                getTextNodes(node.childNodes[i]);
            }
        }
    }

    getTextNodes(node);
    return textNodes;}getTextNodesIn(el);


查看完整回答
反對 回復 2019-05-27
?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

Jauco在評論中發布了一個很好的解決方案,所以我在這里復制它:

$(elem)
  .contents()
  .filter(function() {
    return this.nodeType === 3; //Node.TEXT_NODE
  });


查看完整回答
反對 回復 2019-05-27
?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

$('body').find('*').contents().filter(function () { return this.nodeType === 3; });


查看完整回答
反對 回復 2019-05-27
  • 4 回答
  • 0 關注
  • 1737 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號