2008-10-08 17 views
5

he un poco de html de este modo:Sin tener un enlace en jQuery

<a href="#somthing" id="a1"><img src="something" /></a> 
<a href="#somthing" id="a2"><img src="something" /></a> 

necesito a quitarse los enlaces, así que estoy justo a la izquierda con un par de etiquetas de imagen. ¿Cuál sería la forma más eficiente de hacer esto con jQuery?

Respuesta

8
$("a > img").parent() // match all <a><img></a>, select <a> parents 
    .each(function() // for each link 
    { 
     $(this).replaceWith(    // replace the <a> 
     $(this).children().remove()); // with its detached children. 
    }); 
+0

Si hay algún hermano a la imagen entonces esto va a copiar ellos también. Es posible que desee usar $ (this) .children ("img"). Remove() en su lugar. – Sugendran

+0

@Sugendran: cierto. – Shog9

+0

No sucede que haya hermanos. Pero ese es un buen punto. – defrex

4

Esto debe hacerlo:

$('a[id^=a]').each(function() { $(this).replaceWith($(this).html()); }); 
1

En la llanura Javascript sería algo así como:

<script type="text/javascript"> 
window.onload = function(){ 
    var l = document.getElementsByTagName("a"); 
    for(i=0, im=l.length; im>i; i++){ 
    if(l[i].firstChild.tagName == "img"){ 
     l[i].parentNode.replaceChild(l[i].firstChild,l[i]); 
    } 
    } 
} 
</script> 
+0

jQuery se está utilizando hoy para reemplazar elegantemente las paces de código como su propuesta aquí. ¡Gracias de cualquier manera! –

+0

En serio, este fragmento solo muestra la elegancia de jQuery. Este código y el código de Shog9 son exactamente iguales, pero uno es más pequeño y mucho más ordenado de leer. ¡Sin embargo, este código también hará el trabajo perfectamente! –

+0

Elegante - sí, parece bastante ordenado, pero dentro de jQuery es mucho más grande, así que si no tienes otras razones para contratar una gran biblioteca, úsala. ¡Pero por supuesto, defrex pidió una cosa jQuery y esto no es! -) – roenving

Cuestiones relacionadas