2011-10-28 12 views

cevap

-1

bu

$("h2").each(function(){ 
    var self = $(this); 
    if (self.html().trim().length == 0) 
    { 
    self.remove(); 
    } 
}); 
+0

Neden 'each()' yerine 'filter()' yi kullandınız? – alex

+0

'$ .trim()' bu şekilde çalışmıyor. – alex

+0

Hatam, ancak jQuery kullanıyorsanız, tarayıcılar arası güvenli araçlarını da kullanabilirsiniz. String.prototype.trim() 'ın günümüzde oldukça iyi desteklenmesine rağmen. – alex

1

jQuery kullanmak yok ama ben düz bir JavaScript çözüm verebilir:

var elms = document.getElementsByTagName('h2'), l = elms.length, i; 
for(i=l-1; i>=0; i--) { 
    if(elms[i].innerHTML.replace(/\s+/,"") == "") { 
     elms[i].parentNode.removeChild(elms[i]); 
    } 
} 

Dolayısıyla, sadece sanırım, jQuery eşdeğerdir yap.

+0

'/ \ s +/""' deneyin.Düzenli bir ifade, boşluk ile yer değiştiriyor .. hiçbir şey. – CamelCamelCamel

+0

Eğer OP'nin 'h2' elemanı descendent elementler içeriyorsa, bu bir problem olacaktır. – alex

15

Sen, bu öğeleri kaldırmak döndü sette remove() aramak için ...

$('h2').filter(function() { 
    return ! $.trim($(this).text()); 
}); 

ile sadece boşluk metin ile unsurlarını eşleşebilir.

jsFiddle. jQuery olmadan Alternatif


...

elements.filter(function(element) { 
    return ! (element.textContent || element.innerText).replace(/\s+/g, ''); 
}); 

Eğer senin elements bir HTMLCollection, NodeList (veya başka bir şekilde bir Array), Array.prototype.slice.call(elements) ile Array içine elementsArray.filter(elements, fn) kullanabilir veya dönmek. Eğer çok eski tarayıcıları desteklemek zorunda olmadıysa

, sen return ! (element.textContent || element.innerText).trim() kullanabilirsiniz.

elemanları üzerinde bu, döngü kaldırmak ve thisElement.parentNode.removeChild(thisElement) kullanın.

jsFiddle. Sadece düğümler ile çalışan ile Alternatif


...

var containsWhitespace = function me(node) { 
    var childNodes = node.childNodes; 

    if (childNodes.length == 0) { 
     return true;  
    } 

    for (var i = 0, length = childNodes.length; i < length; i++) { 
     if (childNodes[i].nodeType == 1) { 
      return me(childNodes[i]); 
     } else if (childNodes[i].nodeType == 3) { 
      return ! childNodes[i].data.replace(/\s+/g, ''); 
     } 
    } 
} 

elements.filter(containsWhitespace); 

jsFiddle.

0

Bu yalnızca bir boşluk olup olmadığını kontrol edecek, ancak temel bir örnek çalışır:

$("h2:contains(' ')").remove() 
1

alex adlı üzerine adapte etmek için, bu deneyin:

$('h2').filter(function() { 
    return $.trim($(this).text()).length == 0; 
}).remove(); 

jsfiddle görüyoruz. işte anahtar OP -

+0

Bu sadece benim * daha açık * bir sürümüdür. Mine, boş bir dizgenin JavaScript'te * falsy * olduğuna güveniyor. Açık olmak da faydalıdır, muhtemelen daha açıktır. – alex

+0

Cevabınızı çok beğendim. Asla geri dönebileceğimi bilmiyordum! $ .trim ($ (this) .text()); – bozdoz

İlgili konular