2009-06-01 3 views
2

J'ai ce que je pensais être un simple sélection avec jQuery pour changer du texte sur un paragraphe. Il fonctionne parfaitement la manière traditionnelle, c'est-à-direjquery changer innerhtml d'un P ne fonctionne pas

document.getElementById('message_text').innerHTML = "hello"; 

Mais avec jQuery ce n'est pas le cas. J'ai vérifié les valeurs de $('#message_text') et bien sûr je vois les articles.

$('#message_text').innerHTML = "hello"; 

Est-ce que je fais quelque chose de mal?

Vous avez des idées?

Répondre

18

Quand vous faites quelque chose comme $('#message_text') ce que vous avez il n'y a pas un objet DOM régulier, mais un jQuery enveloppé défini (même si, dans ce cas, il serait seulement être un élément.) Si vous vouliez accéder à une propriété DOM particulier, vous pouvez le faire:

$('#message_text')[0].innerHTML = 'whatever'; 
$('#message_text').get(0).innerHTML = 'whatever'; 

Cependant, ce n'est pas nécessaire dans ce cas comme jQuery a deux fonctions pour faire ce que vous voulez:

html():

$('#message_text').html('whatever'); 

text():

$('#message_text').text('whatever'); 

La différence entre les deux est que html() permettra HTML tout en text() échapperont toutes les balises HTML que vous passez. Utilisez celui dont vous avez besoin en manipulant manuellement le HTML avec innerHTML.

+2

Sympa de votre part de donner une explication complète, j'ai supprimé ma réponse plus simple, non explicative, puisque la tienne est meilleure. –

+1

Merci pour une explication détaillée .. –

5

$('#message_text').html('hello')

sélecteur jQuery renvoie un tableau, pas un nœud d'élément DOM.

6

La fonction jQuery $() ne retourne pas un HTMLElement objet comme getElementById() fait, mais un objet jQuery. Et là vous avez juste la méthode html() comme équivalent à innerHTML. Alors:

$('#message_text').html('hello'); 
Questions connexes