JQuery changement intérieure du texte, mais de préserver html
Je voudrais changer le texte d'un élément HTML, mais de préserver le reste de l'intérieur html avec jQuery.
Par exemple:
<a href="link.html">Some text <img src="image.jpg" /></a>
remplacer "texte" avec un "Autre texte", et le résultat devrait ressembler à:
<a href="link.html">Other text <img src="image.jpg" /></a>
EDIT:
Ma solution actuelle est la suivante:
var aElem = $('a');
var children = aElem.children();
aElem.text("NEW TEXT");
aElem.append(children);
Mais il doit y avoir une façon plus élégante de le faire.
- tu veux changer la valeur, mais sur lequel l'événement??
Vous devez vous connecter pour publier un commentaire.
Cela semble très bien fonctionner.
Démonstration En Direct
$link.children('img')
au lieu defind()
méthode parce que vous voulez que les enfants directs. Utilisationfind()
à la recherche par le biais de petits-enfants.<a>
tag. Sinon, vous devrez ajouter ceux des auditeurs de nouveau.Puisque vous ne pouvez pas modifier le lien d'une option serait de tout simplement utiliser
replace
Exemple sur jsfiddle.
<a><img/>Some text<img/> </a>
à détacher/rattacher les résultats dans<a>Other Text<img/><img/></a>
tout en utilisant un simple de remplacer le maintient de la structure.<img>
balise contientSome text
??Envelopper le texte que vous voulez modifier dans un laps
Ma solution, bien qu'un peu en retard.
Quelques remarques:
contents()
comprend les nœuds de texte, à la différence dechildren()
.var contents = ...
ou bien les éléments restants sont perdus à jamais, une fois remplacé par$(this).html('NEW TEXT')
.length
case est facultative mais recommandée.nodeType
case est facultative mais recommandée.Une alternative serait d'utiliser la
contents()
méthode comme suit:Donné
vous pouvez remplacer
'Some text'
avec jQueryjsFiddle exemple ici.
L'idée de
contents()
a été inspiré par cette question, a répondu par l'utilisateur charlietfl.Vous pouvez la changer .contenu()
où dans votre cas, l' "[0].de données" est vos données de texte
essayer ce code
Efficace et robuste qui ne nécessite pas que vous sachiez ce que les éléments intérieurs sont ou de ce que le texte est:
utilisation de quelques plaine js fonctionnalités:
$('a')[0].firstChild.nodeValue = "Texte";
Vous aurez besoin d'ajouter dans un
<span>
élément et modifier le texte de cet élément, par exemple:Ensuite, vous pouvez appeler à partir de jQuery:
Et votre résultat sera effectivement:
C'est une amélioration que j'ai fait pour le jquery.uniforme de la bibliothèque.
Plus précisément le
$.uniform.update()
fonction.J'ai pris l'idée de acheong87 et changé un peu.
L'idée est de changer le texte dans un span, mais de préserver l'intérieur HTML et les liaisons d'événements.
Pas besoin de stocker et à ajouter du code HTML de cette façon.
J'ai ajouté une fonction jQuery pour ce besoin.
vous pouvez avoir besoin de convertir le html entités de représentation de texte, j'ai donc ajouté
decodeEntities
fonction.Exemple d'utilisation
$('selector').textOnly('some text')
Ma version générique:
D'abréviation pour plus d'éléments et de pointe de texte à modifier: