2011-10-28 48 views
7

me puede quitar fácilmente una etiqueta que no tiene espacios en blanco ...¿Cómo eliminar elementos con espacios en blanco?

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

Pero, cuando hay un espacio ...

<h2> </h2> 

... esto no funciona.

me trataron

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

también sin suerte. ¿Alguien puede ayudar con esto?

Respuesta

-1

probar esto

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

¿Por qué usarías 'filter()' en lugar de 'each()'? – alex

+0

'$ .trim()' tampoco funciona así. – alex

+0

Mi error, pero si está utilizando jQuery, también puede usar sus utilidades de seguridad entre navegadores. Aunque 'String.prototype.trim()' está bastante bien soportado hoy en día. – alex

1

yo no uso de jQuery, pero puedo dar una solución recta 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]); 
    } 
} 

lo tanto, sólo hacer lo que el equivalente jQuery es, supongo.

+0

'/ \ s + /, "" '- que es la clave de la OP.Es una expresión regular, reemplaza el espacio en blanco con ... nada. – CamelCamelCamel

+0

Sin embargo, esto tendrá un problema si el elemento 'h2' del OP puede incluir elementos descendientes. – alex

15

Se puede sincronizar elementos con un espacio en blanco con el único texto ...

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

Para eliminar estos elementos, llame remove() en el conjunto devuelto.

jsFiddle.


Alternativamente, sin jQuery ...

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

Si su elements es una HTMLCollection, NodeList (o de lo contrario no un Array), utilice Array.filter(elements, fn) o gire elements en un Array con Array.prototype.slice.call(elements).

Si no tiene que admitir navegadores más antiguos también, puede usar return ! (element.textContent || element.innerText).trim().

Para quitar esto, recorra los elementos y use thisElement.parentNode.removeChild(thisElement).

jsFiddle.


Por otra parte, con el trabajo con nodos sólo ...

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

Esto sólo se comprobará si hay un espacio, sino que trabaja para un ejemplo básico:

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

Para adaptar el Alex, intente esto:

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

ver jsfiddle.

+0

Esta es solo una versión más * explícita * de la mía. El mío se basa en el hecho de que una cadena vacía es * falsy * en JavaScript. Sin embargo, ser explícito también es útil, probablemente sea más claro. – alex

+0

Disfruté mucho su respuesta. ¡Nunca supe que podría hacer el regreso! $ .trim ($ (this) .text()); – bozdoz

Cuestiones relacionadas