2009-10-15 12 views
22

¿Hay una manera de eliminar el texto que no está envuelto en cualquier etiqueta usando jQueryQuitar texto con jQuery

<p>This is some text</p> 

This is "unwrapped" text //to be removed 

<span>some more text</span> 

Gracias por su ayuda

+2

Todo el texto está envuelto en alguna etiqueta, incluso si es - ¿quieres decir con un elemento contenedor específico? – Greg

+0

+1 para , pensando lo mismo. –

Respuesta

41

Uso de la respuesta de this question:

$(elem) 
    .contents() 
    .filter(function() { 
    return this.nodeType == 3; //Node.TEXT_NODE 
    }).remove(); 
+2

Sí, la función del constructor 'Node' no está obligada a ser visible a nivel de' ventana', y 'TEXT_NODE' normalmente se encontraría solo en el prototipo, no en el constructor. La forma 'correcta' sería 'this.nodeType == this.TEXT_NODE', sin embargo, incluso eso aún no funciona en IE, por lo que normalmente debe definir su propio' var TEXT_NODE = 3; '. – bobince

8

En primer lugar, se puede envolver con luces ficticias:

$("body").contents() 
    .filter(function(){ return this.nodeType != 1; }) 
    .wrap("<span class='orphan'/>"); 

Ahora se pueden quitar fácilmente:

$('span.orphan').remove(); 
1

envolviéndolo en un elemento DOM que significaría jQuery puede encontrarlo:

por ejemplo:

var text = 'This is "unwrapped" text'; 

$("div:contains('" + text + "')").remove(); 

o simplemente:

$('p').next().remove(); 
2

fwiw ..

<div class="parent-element"> 
<p>This is some text</p> 
This is "unwrapped" text //to be removed 
<span>some more text</span> 
</div> 

a través de CSS:

.parent-element { font-size: 0px; } 
.parent-element p { font-size: 12px; } 
.parent-element span { font-size: 14px; } 
+2

El OP está pidiendo una solución en jQuery. Tu respuesta no está usando jQuery. – Pang

1

Es increíble, pero al mismo tiempo, el código siguiente no funciona

$("div.myClass:has(img)").contents().filter(":text").remove(); 

y el código del primer mensaje funciona

$("div.myClass:has(img)") 
    .contents() 
    .filter(function() { 
    return this.nodeType == 3; //Node.TEXT_NODE 
    }).remove(); 

¡Es importante recordar! jQuery 1.8.3.

¡Y antes que nada recuerdo que la manipulación de innerHTML funciona mucho más rápido que este enfoque!

Cuestiones relacionadas