Tengo problemas para entender lo que debería ser una solución simple. Quiero reemplazar el texto dentro de una etiqueta etiquetada, sin afectar a los otros "hermanos", si existen.jQuery reemplazar texto dejando intactos a los hermanos
de marcado de la muestra:
<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>
Objetivo:
- para sustituir el texto
Some Label X
conSome Label
(es decir, eliminarX
desde el texto de la etiqueta). - Las etiquetas de span dentro de la etiqueta deben permanecer intactas si existen, como el
<span class="marker">
anterior. - No sé el valor de
X
, que podría tener 1 o más caracteres de longitud.
guión actual:
Mi script jQuery a continuación las obras, pero sé que es muy ineficiente. Parece que no puedo envolver mi cabeza alrededor de éste por alguna razón ...
//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');
}
});
que pensé al principio yo podría simplemente hacer:
$(".myFieldsetClass label:contains('Some Label ')").text("Some Label");
Pero esto borra todo el contenido de la etiqueta y por lo tanto, elimina el lapso, que no quiero. No puedo usar ninguna función de reemplazo para reemplazar Some Label X
con Some Label
porque no sé qué será X
.
¿Alguien puede sugerir un enfoque más elegante/eficiente para este problema?
Gracias.
EDITAR
Después de probar varias respuestas, creo que el problema parece ser que incluso si selecciono el derecho de cobro, que son los nodos de texto, que jQuery no parece querer modificar .. I He usado FireBug para seleccionar la colección (muchas respuestas debajo de todas seleccionan correctamente pero de maneras ligeramente diferentes). En la consola de Firebug conjunto resultante es:
[<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:">]
El problema parece ser que llamar .replaceWith(), .replace(), .text(), no parece etc. afectar la colección de jQuery. Si permito que la colección anterior para contener uno de los tramos, a continuación, llamar .replaceWith(), .replace(), etc funciones correctamente contra la luz, pero los nodos de texto quede tal cual ..
Will 'x' nunca se va a envolver en su propia etiqueta, o va a ser siempre de texto sin formato? –
Texto plano de Allways, nunca dentro de otra etiqueta. –