57 votes

Comment changer uniquement le nœud texte dans un élément

J'ai le HTML suivant :

  *
  Name

Et je veux changer la légende du label en Titre avec jquery. Donc je fais

$('label[for=user_name]').html('Titre')

Et cela remplace tout le html interne (y compris la balise abbr)

Alors, quelle est la manière la plus simple de ne remplacer que Name ?

84voto

charlietfl Points 41873

Si vous utilisez la méthode contents(), elle renverra également des nœuds de texte. Étant donné que jQuery n'a pas de méthodes de nœud de texte, convertissez le dernier nœud en un nœud DOM

$('label[for="user_name"]').contents().last()[0].textContent='Titre';

Demo: http://jsfiddle.net/yPAST/1/

0 votes

Intéressant.. J'ai seulement une balise par entrée, donc c'est approprié pour moi.

3 votes

Note : la propriété textContent n'est pas disponible dans IE avant la version 9.

50voto

Dom Points 7921

Désolé pour cette réponse tardive... Mais voici une manière de le faire en utilisant uniquement jQuery :

$('label').contents().last().replaceWith('Titre');

1 votes

Tu as sauvé la journée. Merci :)

3 votes

Notez qu'une chaîne à replaceWith est traitée comme du HTML; si elle contient des balises, elle sera analysée en éléments DOM.

0 votes

Ces réponses sont bonnes, donc +1, mais il est fragile de naviguer dans le DOM de cette façon. Lorsque l'on utilise jQuery, il est préférable d'éviter .first(), .last(), .prev(), .next(), etc.

3voto

Code Maverick Points 9448

Ce n'est peut-être pas la manière la plus jolie, mais cela fonctionne :

var $label = $('label[for=user_name]');
$label.html($label.html().replace("Name", "Title"));

0 votes

Désolé !! Même réponse que j'ai déjà postée.. tellement en retard :(

1voto

m90 Points 5315

Vous pouvez sélectionner uniquement l'élément abbr, le stocker, puis remplacer tout le contenu par l'élément stocké plus la légende modifiée :

​$('label[for="user_name"]').each(function(){
   var a = $(this).children('abbr');
   $(this).html(a).append('Titre');
});

Consultez ce exemple

1voto

Jigs Points 2606

Vous pouvez utiliser replace pour accomplir ceci

  var html = $('label[for=user_name]').html().replace('Name','Testing');
  $('label[for=user_name]').html(html);

vérifiez-le : http://jsfiddle.net/DyzMJ/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X