Ich habe Probleme, meinen Kopf einzuwickeln, was eine einfache Lösung sein sollte. Ich möchte Text innerhalb eines Label-Tags ersetzen, ohne die anderen "Geschwister" zu beeinflussen, falls sie existieren.jQuery Text ersetzen, Geschwister intakt lassen
Beispiel Markup:
<fieldset class="myFieldsetClass">
<legend>Sample Fieldset</legend>
<ol>
<li>
<label>
<span class="marker">*</span>
Some Label 1
</label>
</li>
<li>
<label>
Some Label 2
</label>
</li>
<li>
<label>
Text that doesn't match...
</label>
</li>
</ol>
</fieldset>
Ziel:
- Um Text
Some Label X
mitSome Label
zu ersetzen (d entfernenX
aus dem Label-Text). - span Tags innerhalb des Labels müssen intakt bleiben, wenn sie existieren, wie zum Beispiel
<span class="marker">
oben. - Ich kenne nicht den Wert
X
, der 1 oder mehr Zeichen lang sein könnte.
Aktuelles Skript:
Mein jQuery Skript unten funktioniert, aber ich weiß, ist sehr ineffizient. Ich kann meinen Kopf nicht scheinen aus irgendeinem Grund um dieses zu wickeln ...
//for each label in the fieldset that contains text "Some Label "
$(".myFieldsetClass label:contains('Some Label ')").each(function() {
if ($(this).has("span").length > 0) {
//if the label has the span tag within, remove it and prepend it back to the replaced text
$(this).find("span").remove().prependTo($(this).text(labelText));
}
else {
//otherwise just replace the text
$(this).text('Some Label');
}
});
ich zuerst dachte ich einfach tun könnte:
$(".myFieldsetClass label:contains('Some Label ')").text("Some Label");
Aber dies löscht alle Inhalte des Etiketts und Entfernt daher die Spannweite, die ich nicht möchte. Ich kann keine Ersatzfunktionen verwenden, um Some Label X
durch Some Label
zu ersetzen, weil ich nicht weiß, was X
sein wird.
Kann jemand einen eleganteren/effizienteren Zugang zu diesem Problem vorschlagen?
Danke.
EDIT
Nach mehreren Antworten versuchen, ich denke, das Problem, dass auch zu sein scheint, wenn ich die richtige Sammlung auswählen, sie sind Textknoten, die jquery ich nicht ändern zu wollen, scheint .. habe FireBug verwendet, um die Sammlung auszuwählen (viele Antworten unter allen wählen korrekt, aber auf etwas unterschiedliche Weise). In Firebug Konsole resultierenden Satz ist:
[<TextNode textContent="Some Label 1:">,
<TextNode textContent="Some Label 2:">,
<TextNode textContent="Some Label 3:">,
<TextNode textContent="Some Label 4:">,
<TextNode textContent="Some Label 5:">]
Das Problem scheint, dass Aufruf .replaceWith() zu sein, .replace(), .text() usw. scheint nicht die jquery Sammlung zu beeinflussen. Wenn ich erlaube die obige Sammlung eine der Spannweiten zu enthalten, dann ruft .replaceWith(), .replace(), etc Funktionen korrekt gegen die Spanne, aber die Textknoten bleiben wie es ist ..
Wird 'X' jemals in seinem eigenen Tag enthalten sein, oder wird es immer einfacher Text sein? –
Immer reiner Text, niemals in einem anderen Tag. –