2011-10-28 17 views
7

mogę łatwo usunąć tag, który nie ma spacji ...Jak usunąć elementy za pomocą białych znaków?

$('h2:empty').remove(); 

Jednak, gdy istnieje przestrzeń ...

<h2> </h2> 

... to nie działa.

Próbowałem

if ($('h2').html() == " "){ 
    $('h2').remove(); 
} 

Również bez powodzenia. Czy ktoś może w tym pomóc?

Odpowiedz

-1

spróbować tej

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

Dlaczego użyłbyś 'filter()' zamiast 'each()'? – alex

+0

'$ .trim()' również nie działa. – alex

+0

Mój błąd, ale jeśli używasz jQuery, możesz równie dobrze używać bezpiecznych narzędzi różnych przeglądarek. Chociaż 'String.prototype.trim()' jest całkiem dobrze wspierane w dzisiejszych czasach. – alex

1

nie używam jQuery, ale mogę dać prostą rozwiązanie JavaScript:

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

Więc po prostu robić, co jest odpowiednikiem jQuery, tak myślę.

+0

'/ \ s + /, ""' - to jest klucz OP.Jest to wyrażenie regularne, zastępuje spacje za pomocą ... nic. – CamelCamelCamel

+0

To będzie jednak problem, jeśli element "h2" OP może zawierać elementy potomne. – alex

15

można dopasować elementy z tekstu spacji tylko z ...

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

Aby usunąć te elementy, zadzwoń remove() na zwróconego zestawu.

jsFiddle.


Alternatywnie, bez jQuery ...

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

Jeśli Twój elements jest HTMLCollection, NodeList (lub w inny sposób nie jest Array), użyj Array.filter(elements, fn) lub włączyć się do elementsArray z Array.prototype.slice.call(elements).

Jeśli nie trzeba było obsługiwać również starszych przeglądarek, można użyć numeru return ! (element.textContent || element.innerText).trim().

Aby je usunąć, zapętlić elementy i użyć thisElement.parentNode.removeChild(thisElement).

jsFiddle.


Alternatywnie, ze pracuje tylko z węzłami ...

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

Będzie to sprawdzić tylko do jednej przestrzeni, ale działa na prostym przykładzie:

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

Aby przystosować na Alex, spróbuj tego:

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

zobaczyć jsfiddle.

+0

To jest po prostu * bardziej * * * * * * wersja mojej. Mój polega na tym, że pusty ciąg znaków jest * falsy * w JavaScript. Jasność też jest pomocna, prawdopodobnie jest jaśniejsza. – alex

+0

Bardzo mi się podobała twoja odpowiedź. Nigdy nie wiedziałem, że mogę po prostu wrócić! $ .trim ($ (this) .text()); – bozdoz

Powiązane problemy