2009-05-22 7 views
3

Possible en double:
Multiline strings in JavascriptQuelle est la meilleure façon d'avoir de longs littéraux de chaîne en Javascript?

Dans Ruby vous pouvez faire quelque chose comme ça

temp = < < -SQLCODE select * des utilisateurs SQLCODE

De cette façon, vous avoir des littéraux de chaîne très longs dans votre code sans avoir à s'échapper beaucoup o f caractères. Y a-t-il quelque chose de similaire en JavaScript?

Actuellement, j'ai code javascript comme celui-ci, et ses noix me conduire ...

new Element.update(lightbox_id, " \ 
    <div id='overlay' class='overlay' > \ 
    </div> \ 
    <div id='lightbox' class='lightbox'> \ 
     <div class='lightbox_title'> \ 
     <div class='corner_image' onclick=\"close_lightbox();return false;\"><a href='#' >" + corner_image + "</a></div> \ 
     <div class='lightboxname' id='lightboxname'>" + title + "</div> \ 
     <div class='close_image'> \ 
      <a href='#' onclick=\"close_lightbox();return false;\">Close</a> or Escape key\ 
     </div> \ 
     </div> \ 
     <div id='" + lightbox_content_id + "' class='lightbox_content'> \ 
     </div> \ 
     <script> \ 
     watch_for_escape(); \ 
     </script> \ 
    </div> \ 
"); 
+0

Réponse courte: non, vous ne pouvez pas avoir de nouvelles lignes littérales dans les SC trings sans le caractère de continuation. Quelques autres suggestions ici: http://stackoverflow.com/questions/805107/multiline-strings-in-javascript – Shog9

Répondre

5

La syntaxe que vous faites référence est souvent connu sous le nom here-document (or HEREDOC) et non, ce n'est pas disponible en Javascript. L'ajout d'une barre oblique inverse comme vous l'avez fait est le moyen approprié d'étendre les chaînes sur plusieurs lignes en JavaScript.

2

Avoir en ligne html comme ça est une mauvaise pratique, mais si vous voulez vraiment gérer plus propre, essayez ceci:

Placez un div caché sur votre page avec le code HTML que vous voulez, et remplacer les params personnalisés avec quelque chose comme {titre}. Lors de l'appel mise à jour, passez yourdiv.innerHTML.replace (...

+0

Le problème avec cette approche est qu'il rend difficile l'encapsulation des fonctionnalités dans un seul fichier Javascript - par exemple, écrire un plugin qui doit insérer du contenu spécifique dans le DOM. – alexw

0

Si vous utilisez Rails, il devient beaucoup plus propre avec RJS mettre à jour un div avec une multiligne HTML:

page.replace__html 'lightbox_id', :partial => 'overlay' 

puis overlay.html.erb contiendrait le code HTML brut ci-dessus sans s'échapper.

l'avantage est que le fragment « superposition » pourrait également être utilisé dans la charge de la page initiale ainsi que dans beaucoup de cas est ce que vous voulez.

Questions connexes