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

  • Keith Anthe

    Keith Anthe

    26 NİSAN 2011
  • Monica Catral

    Monica Catra

    12 NİSAN 2009
  • Tire Rack

    Tire Rack

    31 Mayıs 2007