SORU
18 Kasım 2008, Salı


Nasıl jQuery ile metin düğümleri seçerim?

Bir elementin tüm alt metin düğümlerini almak için, DV topluluğu istiyorum. Bunu yapmanın en iyi yolu nedir?

CEVAP
9 Aralık 2010, PERŞEMBE


bu bir WordPress kullanmak için uygun bir işlevi yok. Tüm alt öğeleri ancak metin düğümleri verir find(), sadece alt düğümler verecek ama metin düğümleri içerir contents(),, birleştirmek gerekiyor. Buldum:

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

getTextNodesIn(el);

Not: Eğer jQuery 1.7 veya daha önceki bir sürümü kullanıyorsanız, yukarıda çalışmaz kod. Bunu düzeltmek için, andSelf() 12 *değiştirin. andSelf() 1.8 itibaren addBack() lehine önerilmiyor.

Bu biraz verimsiz göre saf DOM yöntemleri ve yer ugly workaround for jQuery's overloading of its contents() function (teşekkürler @rabidsnail açıklamalarda şu ki işaret için), yani burada olmayan bir WordPress kullanmak çözüm kullanarak basit bir özyinelemeli işlevi. Ya metin düğümleri boşluk olmasın includeWhitespaceNodes parametre kontrolleri çıkış dahil (jQuery otomatik olarak filtrelenir.

Güncelleme: includeWhitespaceNodes falsy olduğunda hata Düzeltildi.

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);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jason Parker

    Jason Parker

    14 Aralık 2009
  • SellerDp

    SellerDp

    27 EKİM 2009
  • ShoSho

    ShoSho

    20 Ocak 2010