11552 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Le validateur me dit que je ne peux pas coder "<span..." dans la ligne suivante:
<script type="text/javascript">UneFonction('<span class="wingding">*</span>')</script>

Je suppose qu'il refuse un tag quelconque à l'intérieur du tag "<script>" mais je ne vois pas comment m'en sortir Smiley decu
Ca ne concerne pas plutôt javascript ça ? Smiley smile

En fait, je pense qu'il manque l'équivalent de la fonction echo de PHP, qui est document.write pour javascript.
Administrateur
Pourquoi ne pas placer ta fonction dans un fichier .js externe ?

(je déplace dans le bon salon)
La fonction est bien dans un fichier externe.
L'appel de la fonction est (inévitablement) dans le fichier html.

Le problème n'est pas dans le résultat (tout fonctionne très bien Smiley cligne ) mais le validateur du w3c (http://validator.w3.org/) détecte une erreur :
<span .... non valide dans le tag <script...></script>

Modifié par g41687 (23 Sep 2005 - 12:59)
Les caractères < et > présents dans le contenu de l'élément <script> doivent être échappés, pour ne pas être interprétable comme du balisage HTML. Sinon, en particulier, le caractère > est interprété comme une fermeture de l'élément script.
As-tu essayé de mettre en commentaire ton appel de fonction?
<script type="text/javascript">
//<!--

appel de ta fonction...

//-->
</script>
J'ai effectivement essayé ça :
  <script type="text/javascript">
  <!--
  MaFonction('\<span class="wingd"\>(\</span\>)
  -->
  </script>

... (et d'autres variantes : avec &lt; avec ou sans "\" : toujours invalid " span ..."
Modifié par g41687 (23 Sep 2005 - 14:29)
g41687 a écrit :
J'ai effectivement essayé ça :
  <script type="text/javascript">
  <!--
  MaFonction('\<span class="wingd"\>(\</span\>)
  -->
  </script>



Le code tel que tu l'as écrit va te poser des problèmes en JavaScript qui va essayer d'interpréter les <!--. C'est pourquoi, dans l'exemple que je donnais, j'indiquais une ligne de commentaire JS: //<!-- pour cacher cette ligne.

Est-ce que tu aurais une URL à nous montrer?
OK avec :
  <script type="text/javascript">
  //<!--
  MaFonction('\<span class="wingd"\>(\</span\>')
  //-->
  </script>


Merci à tous ! (et désolé pour les balbutiements)
Modifié par g41687 (26 Sep 2005 - 08:37)
Administrateur
g41687 a écrit :
La fonction est bien dans un fichier externe.
L'appel de la fonction est (inévitablement) dans le fichier html.

Ce que je voulais dire, c'est ça :
<script type="text/javascript" src="tonscript.js"></script>

Modifié par Raphael (23 Sep 2005 - 15:33)
Une autre solution est de ne pas constuire des balises avec du texte, mais avec les méthodes du DOM qui vont bien.

du genre :
My_element = document.createElement( "span" );
My_element.attributes["class"] = "wingd";
Mafonction( My_element );


Evidement il faut que Mafonction() gère correctement l'élément derrière, vu que ce n'est plus simplement une chaîne de caractère.

En plus ça évite les fôtes de frappe qui risquent d'invalider la structure du document.

a écrit :
L'appel de la fonction est (inévitablement) dans le fichier html.


Non, c'est faux, l'appel de la fonction peut tout à fait être dans un fichier externe. A partir du moment où l'appel est en dehors d'une fonction, il sera éxécuté au chargement du fichier de script.
@Raphaël,

De fait (honte à moi, je doutais Smiley confused ) ça fonctionne très bien avec dans un fichier .js :
function mafonction (var1,var2) {
   fonctiondebase('<span class="wingd">(</span>',var1,var2);
}

... et un appel dans l'HTML :
<script type="text/javascript">mafonction('titi','toto')</script>

De plus, ça a l'avantage d'alléger le code de la page Smiley biggrin

@Lanza,

Je vais aussi tester ta proposition avec les méthodes du DOM, au moins par curiosité et ne serait-ce que pour parfaire mes connaissances Smiley cligne .

Un grand merci encore à tous !