Tor:
Mit jQuery versuche ich, alle Vorkommen von zu ersetzen:
<code> ... </code>
mit:
<pre> ... </pre>
Meine Lösung:
Ich bin so weit gekommen,
$('code').replaceWith( "<pre>" + $('code').html() + "</pre>" );
Das Problem mit meiner Lösung:
Das Problem ist jedoch, dass alles zwischen den (zweiten, dritten, vierten usw.) "Code" -Tags durch den Inhalt zwischen den ersten "Code" -Tags ersetzt wird.
z.B
<code> A </code>
<code> B </code>
<code> C </code>
wird
<pre> A </pre>
<pre> A </pre>
<pre> A </pre>
Ich denke, ich muss "dies" und irgendeine Art von Funktion verwenden, aber ich fürchte, ich lerne noch und verstehe nicht wirklich, wie man eine Lösung zusammensetzt.
Antworten:
Sie können eine Funktion an
.replaceWith
[docs] übergeben :this
Bezieht sich innerhalb der Funktion auf das aktuell verarbeitetecode
Element.DEMO
Update: Es gibt keinen großen Leistungsunterschied , aber falls die
code
Elemente andere HTML-Kinder haben, scheint es korrekter zu sein, die Kinder anzuhängen, anstatt sie zu serialisieren:quelle
.each
wird).Das ist viel schöner:
Zugegeben, die Lösung von Felix Kling ist ungefähr doppelt so schnell :
quelle
$('code').children()
gibt ein leeres jQuery-Objekt für das obige Beispiel zurück, da diecode
Elemente keine untergeordneten Elementknoten haben. Obwohl es funktioniert, wenn es untergeordnete Elemente gibt.children()
funktioniert nicht. Die Verwendungcontents()
funktioniert stattdessen einwandfrei. jsfiddle.net/7Yne9unwrap
Entfernt das übergeordnete Element und fügt diewrap
untergeordneten Elemente zum Baum hinzu, löst sie erneut und fügt ein neues übergeordnetes Element hinzu.Es ist richtig, dass Sie immer den
code
Inhalt des ersten erhalten , da er$('code').html()
sich immer auf das erste Element bezieht, wo immer Sie es verwenden.Stattdessen können Sie
.each
alle Elemente durchlaufen und jedes einzeln ändern:quelle
Versuche dies:
http://jsfiddle.net/mTGhV/
quelle
Wie wäre es damit?
quelle
Aufbauend auf Felix 'Antwort.
Dadurch werden die Attribute der
code
Tags in den Ersatz-pre
Tags reproduziert .Bearbeiten: Dies ersetzt auch die
code
Tags, die sichinnerHTML
in anderencode
Tags befinden.quelle
Ab jQuery 1.4.2:
Sie können dann die neuen Elemente auswählen:
Quelle: http://api.jquery.com/replaceWith/#comment-45493689
jsFiddle: http://jsfiddle.net/k2swf/16/
quelle
Wenn Sie Vanille-JavaScript verwenden würden, würden Sie:
Hier ist das jQuery-Äquivalent zu diesem Prozess:
Hier ist die jsperf-URL:
http://jsperf.com/substituting-one-tag-for-another-with-jquery/7
PS: Alle Lösungen , die Verwendung
.html()
oder.innerHTML
sind zerstörerisch .quelle
Ein weiterer kurzer und einfacher Weg:
quelle
Beste und saubere Art und Weise.
quelle
Sie können die HTML-Funktion von jQuery verwenden. Unten finden Sie ein Beispiel, bei dem ein Code-Tag durch ein Pre-Tag ersetzt wird, wobei alle Attribute des Codes beibehalten werden.
Dies kann mit jedem Satz von HTML-Element-Tags funktionieren, die ausgetauscht werden müssen, während alle Attribute des vorherigen Tags beibehalten werden.
quelle
Hergestellt
jquery
Plugin, Pflege auch Attribute.Verwendung:
quelle
Alle hier gegebenen Antworten setzen voraus (wie das Fragenbeispiel zeigt), dass das Tag keine Attribute enthält. Wenn die akzeptierte Antwort darauf ausgeführt wird:
if wird ersetzt durch
Was ist, wenn Sie auch die Attribute behalten möchten - was würde das Ersetzen eines Tags bedeuten ...? Das ist die Lösung:
quelle
content.html( this.html )