Ho problemi a capire cosa dovrebbe essere una soluzione semplice. Voglio sostituire il testo all'interno di un tag etichetta, senza intaccare gli altri "fratelli", se esistono.jQuery sostituisce il testo lasciando intatti i fratelli
markup Esempio:
<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>
Calcio:
- Per sostituire testo
Some Label X
conSome Label
(cioè rimuovereX
dal testo etichetta). - I tag di estensione all'interno dell'etichetta devono rimanere intatti se esistono, come ad esempio lo
<span class="marker">
precedente. - Non conosco il valore di
X
, che può contenere 1 o più caratteri.
Script corrente:
Il mio script jQuery sotto lavori, ma so che è molto inefficiente. Non riesco ad avvolgere la mia testa intorno a questo uno per qualche motivo ...
//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');
}
});
ho pensato in un primo momento si potrebbe semplicemente fare:
$(".myFieldsetClass label:contains('Some Label ')").text("Some Label");
Ma questo cancella tutto il contenuto dell'etichetta e quindi rimuove lo span, che non voglio. Non posso utilizzare alcuna funzione di sostituzione per sostituire Some Label X
con Some Label
perché non so cosa sarà X
.
Qualcuno può suggerire un approccio più elegante/efficiente a questo problema?
Grazie.
EDIT
Dopo aver provato risposte multiple, penso che il problema sembra essere che, anche se seleziono la raccolta destra, sono i nodi di testo, che jquery non sembra voler modificare .. Ho Ho usato FireBug per selezionare la raccolta (molte risposte sotto tutte selezionate correttamente ma in modi leggermente diversi). In Firebug console risultante set è:
[<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:">]
Il problema sembra essere che chiama .replaceWith(), .Rimontare(), .text(), ecc non sembra influenzare la raccolta di jQuery. Se permetto la raccolta di cui sopra per contenere una delle campate, quindi chiamando .replaceWith(), .Rimontare(), ecc funzioni correttamente contro l'arco, ma i nodi di testo rimanere così com'è ..
Will 'X' mai essere avvolto nel proprio tag, o intende sempre testo normale? –
Allways plain text, mai all'interno di un altro tag. –