2011-10-19 29 views
8

Mis escritores tienen la mala costumbre de crear párrafos vacíos. (Es decir, los párrafos que no tienen nada dentro de ellos, como:Eliminar párrafos "vacíos" con jQuery

<p></p> 

¿Hay una función de jQuery que elimina los párrafos "vacías" Esto es lo que he intentado:.

$('p').remove(":contains(' ')"); // nope! bad logic, all p's have empty spaces 

$("p:empty").remove() // nope, doesn't work, doesn't remove any p's 

Algo más que deba tratar ?

Respuesta

18

$("p:empty").remove() funciona para mí (demostración en http://jsfiddle.net/AndyE/XwABG/1/). Asegúrese de que sus elementos son realmente vacía y no contienen ningún espacio en blanco.

puede utilice siempre filter():

// Trimming white space 
$('p').filter(function() { return $.trim(this.innerHTML) == "" }).remove(); 

// Without trimming white space 
$('p').filter(function() { return this.innerHTML == "" }).remove(); 

demostración de trabajo: http://jsfiddle.net/AndyE/XwABG/

+0

usuario podría también '' this.innerHTML' o $ (este) .text() ' – Neal

+0

@Neal: cambió a 'this.innerHTML' para obtener rendimiento. Mi reacción instintiva es generalmente ir por texto, pero eso requiere verificaciones del navegador o recursión. –

+0

Gracias Andy y Neal. –

0

Uso each para iterar sobre todos los párrafos y comprobar si hay innerHtml vacío y quitar los

2

Creo que esto va a funcionar con cualquier cantidad de espacios (lo siento, no estoy seguro de haber entendido si había espacios en los párrafos o no):

$("p").each(function(){ 
    if ($.trim($(this).text()) == ""){ 
    $this.remove(); 
    } 
}); 
0

Si desea ampliar la respuesta de Andy a espacios no rompibles (y utilizar el ajuste de cadena() método en lugar de jQuery de), puede utilizar:

$('p').filter(function() { 
    return this.innerHTML 
     .replace("&nbsp;"," ") 
     .trim() 
     == "" 
}).remove(); 
0

Este es el viejo y simple JavaScript y es muy rápida:

[].filter.call(document.getElementsByTagName("p"), function(elem){return elem.childElementCount==0 && elem.textContent.trim()==''}) 
    .forEach(function(elem){elem.parentNode.removeChild(elem)}) 

Ésta es incluso más rápido:

var paragraphs = document.getElementsByTagName("p"); 
for (var i = 0, len = paragraphs.length; i < len; i++) { 
    var elem = paragraphs[i]; 
    if (elem.childElementCount == 0 && elem.textContent.trim() == '') { 
     elem.parentNode.removeChild(elem); 
     i--; 
     len--; 
    } 
} 
0

Si los párrafos vacíos son

entonces p de fireeyedboy: vacío selector es el camino a seguir: -

$('p').each(function() { 
    var $this = $(this); 
    if($this.html().replace(/\s|&nbsp;/g, '').length == 0) 
     $this.remove(); 
}); 
Cuestiones relacionadas