2008-10-08 15 views
5

mam trochę html tak:zdejmowania izolacji z łącza w jQuery

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

muszę zdejmować linki więc ja tylko w lewo z kilku tagów graficznych. Jaki byłby najskuteczniejszy sposób na zrobienie tego za pomocą jQuery?

Odpowiedz

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

Jeśli są jakieś rodzeństwo do obrazu to będzie skopiować je dobrze. Zamiast tego możesz użyć funkcji $ (this) .children ("img"). Remove(). – Sugendran

+0

@Sugendran: prawda. – Shog9

+0

Nie ma żadnego rodzeństwa. Ale to jest dobry punkt. – defrex

4

ten powinien zrobić:

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

jako zwykły javascript byłoby coś takiego:

<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 jest obecnie używany do eleganckiego zastępowania plików kodu, jak tutaj proponujesz. Dzięki i tak! –

+0

Poważnie, ten fragment pokazuje tylko elegancję jQuery. Ten kod i kod Shog9 są dokładnie takie same, ale jeden jest mniejszy i jest o wiele lepszy do odczytania. Chociaż ten kod doskonale spełni swoje zadanie! –

+0

Elegancko - tak wygląda raczej schludnie, ale wewnątrz jQuery jest znacznie większy, więc jeśli nie masz innych powodów, by zaangażować ogromną bibliotekę, użyj tego. Ale oczywiście, defrex poprosił o coś jQuery, a to nie jest! -) – roenving

Powiązane problemy