2012-01-05 22 views
9

que tienen el código HTML siguiente:¿Cómo eliminar todo dentro de un DIV a excepción de un elemento?

<div class="item"> 
    <img src="http://mintywhite.com/images/wg/0904/05rssfeedicons/rss-feed-icons11.jpg"/> 
    TEXT NODE 
    <span class="some_class">What the funk?</span> 
    <form>What the monkey</form> 
</div> 

Quiero eliminar todo dentro div.item a excepción de la imagen. Intenté usar este fragmento de código, pero el nodo de texto aún permanece dentro del div.

$('.item').contents().not('img').remove(); 

¿Alguna sugerencia?

Aquí es mi jsFiddle que se puede jugar con: http://jsfiddle.net/pSmDW/

+0

El texto sigue siendo porque no es un elemento DOM. Intenta agregar un '' a su alrededor. O creo que deberías hacer algo como '$ (". Clase "). Text() =" ";' pero no del todo seguro. –

Respuesta

15

Prueba esto: $('.item').contents(':not(img)').remove();

+0

Super útil y simple +1 – Ben

+0

Esto no funcionará para jQuery> 1.9.1. –

6
var itm = $('.item'); 
var img = itm.children('img'); 
itm.empty().append(img); 

http://jsfiddle.net/pSmDW/2/


Si hay cualquier dato o manipuladores en la imagen, podemos utilizar .detach().

var itm = $('.item'); 
var img = itm.children('img').detach(); 
itm.empty().append(img); 

http://jsfiddle.net/pSmDW/3/


Si hay varios de éstos, tendrá que utilizar .each().

$('.item').each(function() { 
    var img = $(this).children('img').detach(); 
    $(this).empty().append(img); 
}); 

http://jsfiddle.net/pSmDW/4/

0

El nodo de texto tiene que ser envuelto en una etiqueta HTML como lapso. Intenté esto con el JSFiddle que me proporcionó y no tuve problemas. http://jsfiddle.net/pSmDW/1/

¡Buena suerte! Tom

<div class="item"> 
    <img src="http://mintywhite.com/images/wg/0904/05rssfeedicons/rss-feed-icons11.jpg"/> 
    **<span>TEXT NODE</span>** 
    <span class="some_class">What the funk?</span> 
    <form>What the monkey</form> 
</div> 
+0

No estoy de acuerdo, mi solución funciona. El método de contenidos significa que no necesita una etiqueta de span. Estoy de acuerdo, sin embargo, una etiqueta de span sería la mejor práctica. – Dessus

+0

Gracias por la respuesta, Tom.Lo siento, no estaba claro en mi pregunta, pero eso es parte del problema, tener nodos de texto que no están envueltos en un elemento. – John

2

para jQuery v1.9.1 y por debajo del siguiente trabajo:

$('.item').contents(':not("img")').remove(); 

Esto buscará todos los elementos (incluyendo los nodos de texto) que aren' t imágenes y eliminarlos.

$(document).ready(function() { 
 
    $('.item').contents(':not("img")').remove(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div class="item"> 
 
    <img src="https://via.placeholder.com/350x150"/> 
 
    TEXT NODE 
 
    <span class="some_class">What the funk?</span> 
 
    <form>What the monkey</form> 
 
</div>

para jQuery> 1.9.1 no es un problema cuando se utiliza con .contents():not(). Como solución, puede tomar la imagen y luego reemplazar el .html() del elemento con la imagen.

$(document).ready(function() { 
 
    var imgNode = $('.item').find('img'); 
 
    $('.item').html(imgNode); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="item"> 
 
    <img src="https://via.placeholder.com/350x150"/> 
 
    TEXT NODE 
 
    <span class="some_class">What the funk?</span> 
 
    <form>What the monkey</form> 
 
</div>

+0

Puede usar esto en su lugar para 2.1.1: $ ('. Item'). Children (': not (img)') eliminar(); – Dessus

+0

Aunque su respuesta elimina los elementos de texto, y mi comentario anterior no lo hace. – Dessus

Cuestiones relacionadas