Je souhaite mettre à jour le texte de l'élément de manière dynamique:
<div>
**text to change**
<someChild>
text that should not change
</someChild>
<someChild>
text that should not change
</someChild>
</div>
Je suis nouveau dans jQuery, donc cette tâche semble être assez difficile pour moi. Quelqu'un pourrait-il m'indiquer une fonction / sélecteur à utiliser?
Si c'est possible, j'aimerais le faire sans ajouter de nouveau conteneur pour le texte que je dois modifier.
Réponses:
Mark a une meilleure solution en utilisant jQuery , mais vous pourrez peut-être le faire également en JavaScript standard.
En Javascript, la
childNodes
propriété vous donne tous les nœuds enfants d'un élément, y compris les nœuds de texte.Donc, si vous saviez que le texte que vous vouliez changer allait toujours être la première chose dans l'élément, alors donné par exemple ce HTML:
Vous pouvez faire ceci:
Bien sûr, vous pouvez toujours utiliser jQuery pour sélectionner le
<div>
en premier lieu (ievar your_div = $('your_div').get(0);
).la source
data
ou lanodeValue
propriété existante .$('#yourDivId')[0].childNodes[0].nodeValue = 'New Text';
Mise à jour 2018
Comme il s'agit d'une réponse assez populaire, j'ai décidé de la mettre à jour et de l'embellir un peu en ajoutant le sélecteur de noeud de texte à jQuery en tant que plugin.
Dans l'extrait ci-dessous, vous pouvez voir que je définis une nouvelle fonction jQuery qui obtient tous (et uniquement) les textNodes. Vous pouvez également enchaîner cette fonction avec par exemple la
first()
fonction. Je fais une découpe sur le nœud de texte et vérifie s'il n'est pas vide après la découpe car les espaces, les tabulations, les nouvelles lignes, etc. sont également reconnus comme des nœuds de texte. Si vous avez également besoin de ces nœuds, supprimez simplement cela de l'instruction if de la fonction jQuery.J'ai ajouté un exemple comment remplacer le premier nœud de texte et comment remplacer tous les nœuds de texte.
Cette approche facilite la lecture du code et facilite son utilisation plusieurs fois et à des fins différentes.
La mise à jour 2017 (adrach) devrait toujours fonctionner aussi si vous préférez cela.
En tant qu'extension jQuery
Afficher l'extrait de code
Javascript (ES) eqivilant
Afficher l'extrait de code
Mise à jour 2017 (adrach):
Il semble que plusieurs choses aient changé depuis sa publication. Voici une version mise à jour
Réponse originale (ne fonctionne pas pour les versions actuelles)
Source: http://api.jquery.com/contents/
la source
.filter(':first')
, mais utiliser à la.first()
place a fonctionné pour moi. Merci!.text()
(voir ce jsfiddle ) mais avec.replaceWith()
( jsfiddle ici ).nodeType=3
ce sujet est moyen de filtrer uniquement le type de nœud de "TEXT", w3schools.com/jsref/prop_node_nodetype.asp pour plus d'informationsVoir en action
Balisage:
la source
Cela ne change que le premier textnode
la source
Enveloppez simplement le texte que vous souhaitez modifier dans une plage avec une classe à sélectionner.
Ne répond pas nécessairement à votre question, je sais, mais, probablement une meilleure pratique de codage. Gardez les choses propres et simples
Voilà!
la source
Pour le cas spécifique que vous avez mentionné:
... c'est très simple:
Vous ne dites pas comment vous voulez généraliser cela. Si, par exemple, vous souhaitez modifier le texte du premier nœud de texte dans le
<div>
, vous pouvez faire quelque chose comme ceci:la source
la source
Voici encore une autre méthode: http://jsfiddle.net/qYUBp/7/
HTML
JQUERY
la source
Beaucoup de bonnes réponses ici, mais elles ne gèrent qu'un seul nœud de texte avec des enfants. Dans mon cas, j'avais besoin d'opérer sur tous les nœuds de texte et d'ignorer les enfants html MAIS PRESERVEZ LA COMMANDE.
Donc, si nous avons un cas comme celui-ci:
Nous pouvons utiliser le code suivant pour modifier uniquement le texte ET CONSERVER LA COMMANDE
Voici le jsfiddle de son fonctionnement
la source
Je pense que vous recherchez .prependTo ().
http://api.jquery.com/prependTo/
la source
Réponse simple:
la source
Le problème avec la réponse de Mark est que vous obtenez également des nœuds de texte vides. Solution comme plugin jQuery:
la source
C'est une vieille question mais vous pouvez créer une fonction simple comme celle-ci pour vous faciliter la vie:
Exemple:
Usage:
la source
Vesrsion 2019 - Court et simple
Explication
document.querySelector('#your-div-id')
est utilisé pour sélectionner le parent (l'élément dont vous êtes sur le point de modifier le texte).childNodes[0]
sélectionne le nœud de texte.nodeValue = 'new text'
définit la valeur du nœud de texte sur "nouveau texte"Cette réponse est peut-être inspirée du commentaire de Dean Martin. Je ne peux pas le dire avec certitude puisque j'utilise cette solution depuis des années maintenant. Je pensais juste que je devrais afficher cette probabilité ici parce que certaines personnes se soucient plus de cela que du fait que c'est la meilleure solution.
la source