Accès aux balises DIV en JavaScript

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Répondre
shiftcode
Arias
Messages : 19
Inscription : 10 déc. 2004, 07:08

Accès aux balises DIV en JavaScript

Message par shiftcode »

Bonjour, je viens de mettre à jour ce qui pour moi est un bug, mais qui a peut-être une explication. Voici mon code:

Code : Tout sélectionner

<body>
<script language="JavaScript">
document.write('<div id="id_js">id javascript</div>');
document.getElementById("id_js").innerHTML   = "Javascript div modified";
document.getElementById("id_html").innerHTML = "HTML div modified";
</script>
<div id="id_html">id html</div>
</body>
Dans ce code, la balise DIV créée par le script (id_js) voit son contenu changer, mais rien ne se passe pour le contenu de la balise DIV codée en HTML (id_html). La console JavaScript fournit le message suivant :
Erreur : document.getElementById("id_html") has no properties
Fichier Source : file:///C:/tmp/BugFireFox.html
Ligne : 5
Ce code fonctionne sous Netscape 6, Opera 7, ie 5, 5.5 et 6. Quelqu'un a-t-il une idée?
bobo
Iguane
Messages : 764
Inscription : 18 août 2003, 11:04

Message par bobo »

La raison est simple, au moment de l'exécution du script, ta div "id_html" n'existe pas encore.
Si tu la places avant l'élément <script>, tu constateras que le script fonctionne.
Sinon, il faut placer ton code dans une fonction appelée par l'événement onload.
Les standards c'est bon, mangez en !
Flore & Sébastien
Unité dans la diversité.
olab
Varan
Messages : 1254
Inscription : 30 juil. 2003, 20:20

Message par olab »

Je pense que lorsque ton script est exécuté, le div id_html n'a pas encore été chargé dans l'arbre dom. D'ailleurs tu ne dois pas utiliser ton javascript comme ça, mais plutôt :

Code : Tout sélectionner

<script type="text/javascript">
var divid = new document.createElement("div");
divid.setAttribute("id", "id_js");
divid.setAttribute("innerHTML", "id javascript");
// et après tu l'ajoute à un élément parent : genre body.appendElement(divid)
document.getElementById("id_js").innerHTML   = "Javascript div modified";
document.getElementById("id_html").innerHTML = "HTML div modified";
</script>
Bon il y a peut être des erreurs dans le code, j'ai tapé ça à l'arrache, mais l'idée est là.
shiftcode
Arias
Messages : 19
Inscription : 10 déc. 2004, 07:08

Message par shiftcode »

Oh my god! Il serait donc possible d'écrire proprement en JavaScript? :lol: Je ne connaissais pas cette façon d'écrire du code dynamique, mais je l'avais un peu préssenti en zyeutant l'explorateur DOM de Monsieur FireFox. C'est un peu plus structuré, et çà ressemble étrangement à une approche Java du langage.

Bon, passons là dessus. En effet, çà marche beaucoup mieux après avoir déplacé le code JavaScript. Ce qui me faisait enrager, c'est que je voyais bien les objets dans l'explorateur JavaScript, mais une fois la page chargée! J'ai eu cette idée de déplacer le code peu de temps après avoir posté cette requète, par un vieux relent de souvenir de codage JavaScript au temps de Netscape 4.5 (beurk!)

Maintenant, tout fonctionne correctement. Merci à vous. Mon site n'a pas nécessité beaucoup de modifications pour marcher sous FireFox (merci DOM!) cf ici: http://mdelamare.free.fr/index.php?page ... le#firefox

C'est cool. Moi, je l'aime bien, comme navigateur. Mais j'ai encore de vielles habitudes avec Crazy Browser (moteur Internet Explorer + support des onglets + filtre popup + failles de sécurité d'ie :lol: ).
Bobe
Iguane
Messages : 742
Inscription : 28 juil. 2003, 21:29

Message par Bobe »

Attention, la propriété innerHTML n'est pas normalisée, il ne faut pas l'utiliser.

Les outils normalisés pour modifier dynamiquement un document:
http://www.yoyodesign.org/doc/w3c/dom2/ ... rview.html
« La vie d’un geek est un combat perpétuel contre l’imperfection »
PsyDk
Lézard à collerette
Messages : 317
Inscription : 23 sept. 2003, 09:41

Message par PsyDk »

Vi, on en fait des choses avec le DOM. Adieu document.write, adieu innerHTML. Voici un script qui crée un paragraphe avec du texte dedans :

Code : Tout sélectionner

<?xml version="1.0" encoding="iso-8859-15"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Title</title>

<script type="text/javascript">
function OnDocumentLoaded()
{
	var p = document.createElement("p");
	var text = document.createTextNode("zouli texte");
	p.appendChild(text);

	var aBodies = document.getElementsByTagName("body");
	aBodies[0].appendChild(p);
}
</script>
</head>

<body onload="OnDocumentLoaded()">
</body>

</html>
Et voici mon site de référence en la matière : http://www.mozilla.org/docs/dom/domref/
Invité

Message par Invité »

C'est cool tout çà. Ce qui me gène toujours, c'est que le document auquel tu fais allusion, PsyDk, s'appelle Gecko DOM Reference. Je suis face à un dileme, celui de lire une doc bien construite mais pour un navigateur particulier, ou celui de lire une doc pour tous les navigateurs prétendus "DOM compliant", mais émanant du W3C, c'est à dire imbitable pour le commun des programmeurs, et qui en plus n'est pas très bien structuré :wink:
Bon, c'est promis, je ferai de mon mieux pour coder plus proprement, ce qui nous facilitera les choses par la suite. En ce moment, on se pose une grosse question au boulot. Faut-il rendre nos applications web extranet compatibles avec FireFox, sachant qu'on ne sait pas évaluer une telle charge de travail, et qu'on ne sait pas encore pour quelle portion de la population on travaille.
Tiens, je vais lancer un troll sur ce sujet :lol:
PsyDk
Lézard à collerette
Messages : 317
Inscription : 23 sept. 2003, 09:41

Message par PsyDk »

Yep, c'est le Gecko Dom, donc il faut faire attention. Mais comme Gecko est très proche des standards Web, tu n'as pas trop à te faire de soucis. Ce document est tellement agréable à lire que je prends quand même ce petit risque :)
shiftcode
Arias
Messages : 19
Inscription : 10 déc. 2004, 07:08

Message par shiftcode »

Oui, risque très limité si tu testes ton code sur les autres navigateurs pas la suite.
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

Anonymous a écrit :C'est cool tout çà. Ce qui me gène toujours, c'est que le document auquel tu fais allusion, PsyDk, s'appelle Gecko DOM Reference. Je suis face à un dileme, celui de lire une doc bien construite mais pour un navigateur particulier, ou celui de lire une doc pour tous les navigateurs prétendus "DOM compliant", mais émanant du W3C, c'est à dire imbitable pour le commun des programmeurs, et qui en plus n'est pas très bien structuré :wink:
Si je puis me permettre, bien que ça s'appelle "Gecko DOM Reference", il y a un lien en bas de chaque page vers la spécification correspondante. Donc oui tu peux faire relativement confiance à ce guide et vérifier si tu as un doute.

Exemple pour innerHTML qui n'a pas de spécification pour le moment (je pense une est en cours dans le cadre de la spécification webapps du WHATwg) : http://www.mozilla.org/docs/dom/domref/ ... ml#1027694
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 3 invités