Cel:
Używając jQuery, próbuję zamienić wszystkie wystąpienia:
<code> ... </code>
z:
<pre> ... </pre>
Moje rozwiązanie:
Dotarłem do następujących,
$('code').replaceWith( "<pre>" + $('code').html() + "</pre>" );
Problem z moim rozwiązaniem:
ale problem polega na tym, że zastępuje wszystko między tagami „kod” (drugi, trzeci, czwarty itd.) zawartością między pierwszymi tagami „kod”.
na przykład
<code> A </code>
<code> B </code>
<code> C </code>
staje się
<pre> A </pre>
<pre> A </pre>
<pre> A </pre>
Myślę, że muszę użyć „tego” i jakiejś funkcji, ale obawiam się, że wciąż się uczę i nie bardzo rozumiem, jak połączyć rozwiązanie.
Odpowiedzi:
Możesz przekazać funkcję do
.replaceWith
[docs] :Wewnątrz funkcji
this
odnosi się do aktualnie przetwarzanegocode
elementu.PRÓBNY
Aktualizacja: nie ma dużej różnicy w wydajności , ale w przypadku, gdy
code
elementy mają inne elementy podrzędne HTML, dołączanie elementów podrzędnych zamiast ich serializacji wydaje się być bardziej poprawne:źródło
.each
).To jest o wiele przyjemniejsze:
Chociaż trzeba przyznać, że rozwiązanie Felixa Klinga jest około dwa razy szybsze :
źródło
$('code').children()
zwróci pusty obiekt jQuery dla powyższego przykładu, ponieważcode
elementy nie mają węzłów elementów potomnych. Chociaż działa, jeśli istnieją elementy potomne.children()
nie działa. Używaniecontents()
zamiast tego działa doskonale. jsfiddle.net/7Yne9unwrap
usuwa rodzica i dodaje dzieci do drzewa,wrap
odłącza je ponownie i dodaje nowego rodzica.To prawda, że zawsze otrzymasz
code
zawartość pierwszego , ponieważ$('code').html()
zawsze będzie odnosić się do pierwszego elementu, gdziekolwiek go użyjesz.Zamiast tego możesz użyć
.each
iteracji po wszystkich elementach i zmienić każdy z nich indywidualnie:źródło
Spróbuj tego:
http://jsfiddle.net/mTGhV/
źródło
Co powiesz na to?
źródło
Opierając się na odpowiedzi Felixa.
Spowoduje to odtworzenie atrybutów
code
tagów wpre
tagach zastępczych .Edycja: spowoduje to zastąpienie nawet tych
code
tagów, które znajdują się wewnątrzinnerHTML
innychcode
tagów.źródło
Od jQuery 1.4.2:
Następnie możesz wybrać nowe elementy:
Źródło: http://api.jquery.com/replaceWith/#comment-45493689
jsFiddle: http://jsfiddle.net/k2swf/16/
źródło
Gdybyś używał waniliowego JavaScript, to:
Oto odpowiednik tego procesu w jQuery:
Oto adres URL jsperf:
http://jsperf.com/substituting-one-tag-for-another-with-jquery/7
PS: Wszystkie rozwiązania, które wykorzystują
.html()
lub.innerHTML
są destrukcyjne .źródło
Kolejny krótki i łatwy sposób:
źródło
Najlepszy i czysty sposób.
źródło
Możesz użyć funkcji html jQuery. Poniżej znajduje się próbka polegająca na zamianie znacznika kodowego na znacznik wstępny, przy jednoczesnym zachowaniu wszystkich atrybutów kodu.
Może to działać z dowolnym zestawem znaczników elementów HTML, które trzeba było zamienić, zachowując wszystkie atrybuty poprzedniego znacznika.
źródło
Stworzono
jquery
wtyczkę, zachowując również atrybuty.Stosowanie:
źródło
Wszystkie podane tutaj odpowiedzi zakładają (jak wskazuje przykład pytania), że w tagu nie ma atrybutów. Jeśli zaakceptowana odpowiedź zostanie uruchomiona na tym:
jeśli zostanie zastąpiony
Co jeśli chcesz zachować również atrybuty - co oznaczałoby zastąpienie tagu ...? Oto rozwiązanie:
źródło
content.html( this.html )