IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Pourquoi faut-il absolument une balise fermante ?


Sujet :

JavaScript

  1. #1
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut Pourquoi faut-il absolument une balise fermante ?
    Salut,

    Une question toute simple : pourquoi faut-il importer un script en utilisant absolument une balise fermante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script src="monscript.js"></script>
    Pourquoi ceci ne fonctionne-t-il pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script src="monscript.js" />
    ?

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Une balise <script> est susceptible d'avoir un contenu et comme il ne peut exister qu'une syntaxe par élément, elle ne peut donc pas être autofermante.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Une balise <script> est susceptible d'avoir un contenu et comme il ne peut exister qu'une syntaxe par élément, elle ne peut donc pas être autofermante.
    Merci de ta réponse.

    Mais cela décale simplement la question : pourquoi le fait d'avoir un contenu pour la balise n'est-il pas optionnel, plutôt qu'obligatoire ?

    Par exemple, pour la balise p, ne peut-on pas faire, au choix :
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p id="toto">un texte</code>
    Si on n'a pas de contenu, on peut fermer la balise. Non ?

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Non, la syntaxe
    n'est ni correcte ni conforme.
    Une balise est soit autofermante, soit pas, elle ne peut pas l'être au bon vouloir du développeur.

    Ensuite, les navigateurs rectifient les erreurs de syntaxe, mais ce n'est pas pour autant que cela est correct (même si ça semble fonctionner).

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!doctype html>
    <html>
        <head>
    		<meta charset="utf-8" />
    		<title>Syntaxe</title>
        </head>
        <body>
    		<p id="nogood" />
    		<p id="good"></p>
    		<script>
    			alert(document.body.innerHTML);
    		</script>
        </body>
    </html>
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    OK, eh bien j'aurais appris quelque chose.

    Par contre, je ne comprends pas bien pourquoi une balise est soit autofermante, soit pas, surtout en XHTML.

    Car en XML, c'est au choix. Si j'ai une balise sans contenu, je peux décider arbitrairement de l'autofermer.

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Car en XML, c'est au choix.
    Non, si tu as correctement écrit la DTD de ton XML, ce n'est pas au choix
    Quant à la DTD de HTML et de xhtml, elle est correctement écrite
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Non, si tu as correctement écrit la DTD de ton XML, ce n'est pas au choix
    Quant à la DTD de HTML et de xhtml, elle est correctement écrite
    Ah ?

    Eh bien merci, j'étais persuadé qu'on pouvait dire dans la DTD que le contenu était optionnel.

    Je dormirai moins ignorant ce soir.

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Encore une fois, que le contenu soit optionnel est une chose (comme dans la balise <script>) mais s'il peut y avoir du contenu, alors la balise doit avoir une balise fermante.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 128
    Points : 210
    Points
    210
    Par défaut
    Yep comme le dit Bovino :

    http://www.w3.org/TR/REC-xml/
    3.2 Element Type Declarations
    [...]
    Element Type Declaration
    [45] elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>' [VC: Unique Element Type Declaration]
    [46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children

    Tu remarquera les pipes dans la définition de contentspec.

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Citation Envoyé par ®om Voir le message
    OK, eh bien j'aurais appris quelque chose.

    Par contre, je ne comprends pas bien pourquoi une balise est soit autofermante, soit pas, surtout en XHTML.

    Car en XML, c'est au choix. Si j'ai une balise sans contenu, je peux décider arbitrairement de l'autofermer.
    En XML il ne faut pas confondre :
    - ne pas avoir de contenu
    OU
    - être auto-fermante.

    En XML, on peut écrire <br /> ou <br></br> et c'est exactement la même chose. Aucune des deux n'a de contenu. L'une est auto-fermante, l'autre pas.

    De même, en XML, <script /> ou <script></script>, c'est pareil.
    En XML, oui. En HTML, non.

    Et en XHTML, puisque c'est du XML ?
    En principe, XHTML suit les règles du XML, oui. Mais.
    - Mais il est extrêmement conseillé, par le W3C et tout le reste, d'être prudent et de favoriser la compatibilité ascendante avec HTML. Donc pas de <br></br>, seulement des <br />. Et pas de <script />, seulement des <script></script>.

    - Mais en général, les navigateurs traitent le XHTML comme si c'était du HTML. Parce qu'ils ne se basent pas sur le DOCTYPE. Ils se basent sur le content-type envoyé dans les headers.
    Si c'est text/html, le document est traité comme du HTML et pas du XHTML, il faut donc respecter les règles du HTML.
    Si c'est un contenu application/xhtml+xml, il sera traité comme du XHTML et ce sont les règles du XML qui s'appliquent.

    Donc :
    - la prudence dit de faire la même chose en HTML et en XHTML.
    - en général, tout se passe comme si XHTML n'existait pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [XSLT] Chemin absolu dans le nom d'une balise XML
    Par le_bono dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/05/2009, 11h26
  2. [HTML] Est-ce propre de marquer une balise fermante ?
    Par guidav dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 09/07/2008, 15h14
  3. Forcer l'existance d'une balise fermante
    Par guejo dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 18/07/2007, 15h34
  4. [XSLT] inclure du XSL dans une balise html
    Par iaa dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/08/2002, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo