2011-02-02 1 views
2

Je sais que ma question est très similaire à celle-ci: jQuery text() function loses line breaks in IE, mais mes besoins sont légèrement différents.Comment préserver les sauts de ligne dans une zone de texte dans jQuery?

J'ai une zone de texte sur ma page qui a une chaîne de texte «modèle» à entrer par l'utilisateur. (Il leur permet d'écrire un message, en utilisant% NAME% comme espace réservé pour le nom.)

Une fois que l'utilisateur a terminé le "modèle", je l'ai placé dans une seconde zone de texte qui remplace en fait% NAME% avec un nom quelconque Devrait être utilisé. J'ai cette partie de la fonction couverte, et ça fonctionne parfaitement.

La deuxième partie fonctionne très bien dans la plupart des navigateurs.

Toutefois, dans Internet Explorer, les sauts de ligne de la première zone de texte ne sont pas conservés dans la seconde. Ainsi, par exemple, si l'utilisateur est entré dans la première case:

Hi %NAME%, 
How are you? 

Et le nom de remplacer le texte était « Zak », la seconde zone apparaîtront comme:

Hi Zak,How are you? 

Mon code pour obtenir le texte dans la deuxième zone est:

var inviteTemplate=$('#invitationTemplate').text(); 
inviteTemplate=inviteTemplate.replace(/%NAME%/g,name); 
$('#invitationText').html(inviteTemplate); 

Je suppose que le problème est à l'utilisation .text() pour obtenir le contenu du textarea. Y a-t-il un moyen de faire en sorte que IE conserve les sauts de ligne dans la deuxième zone de texte?

+2

essayez d'utiliser .html() ou .val() –

+0

Si ce sont des zones de texte, alors ne devriez-vous pas utiliser val() et non text() ou html()? –

+0

@Sime: oh désolé. Je voulais dire textarea! – Zak

Répondre

3

Je peux confirmer que dans IE9 beta, vous pouvez transférer le texte d'un élément TEXTAREA vers un autre élément TEXTAREA avec les sauts de ligne préservés.

démonstration en direct:http://jsfiddle.net/LWjP6/1/

+0

Aha! C'était mon problème. Lorsque j'ai essayé d'utiliser .val pour la première zone de texte avant, j'ai gardé la seconde zone de texte comme changeant le .html() au lieu du .val(). Je vous remercie! – Zak

8

Vous lisez les données sous forme de texte et de l'écriture au format HTML. Avez-vous essayé de remplacer les caractères de nouvelle ligne par des balises HTML BR? par exemple.

inviteTemplate = inviteTemplate.replace(/\n/g, '<br>'); 

Je suis sûr que cela fera ce que vous voulez.

Questions connexes