Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

innerHTML

6 réponses
Avatar
Mihamina (R12y) Rakotomandimby
Bonjour à tous.

J'ai découvert un "truc" cette nuit: faire un innerHTML d'un <table> n'est
pas conforme.

Prenons un tableau:
http://infogerance.asso-polyvalente.fr/trac/browser/tri_tableau/m.js?rev=16

Une fonction pour afficher ce tableau:
http://infogerance.asso-polyvalente.fr/trac/browser/tri_tableau/affichage.js?rev=16

Et le code HTML:
http://infogerance.asso-polyvalente.fr/trac/browser/tri_tableau/index.html?rev=16

Dans cet état là, le code fonctionne sous Firefox2 (enfin... Iceweasel) mais
Konqueror me jette avec un "DOM Exception 7"

Par contre, si comme indiqué:
http://infogerance.asso-polyvalente.fr/trac/changeset/17
Je fais un innerHTML d'un <div>, tout se passe bien.

De quels éléments (portent-ils un "nom" particulier?) ne peut-on pas
modifier le innerHTML?

6 réponses

Avatar
ASM
Bonjour à tous.

J'ai découvert un "truc" cette nuit: faire un innerHTML d'un <table> n'est
pas conforme.


tout dépend de ...

Prenons un tableau:
http://infogerance.asso-polyvalente.fr/trac/browser/tri_tableau/m.js?rev

Une fonction pour afficher ce tableau:
http://infogerance.asso-polyvalente.fr/trac/browser/tri_tableau/affichage.js?rev


J'aimerais bien savoir ce que représente 't' dans :
var largeur=t[0].length;

est-ce bien
t=document.getElementById('monTable').getElementsByTagName('TBODY')[0].rows;
?

Et le code HTML:
http://infogerance.asso-polyvalente.fr/trac/browser/tri_tableau/index.html?rev


où il est le code html ?

Dans cet état là, le code fonctionne sous Firefox2 (enfin... Iceweasel) mais
Konqueror me jette avec un "DOM Exception 7"


Normalement innérer le html d'un table ça fonctionne bien.
Faut juste penser à échapper les /

essaie avec :
resultat += "</td>";
au lieu de :
resultat += "</td>";
et pareil pour "</th>" et "</tr>" ainsi que "</table>"

d'ailleurs ça m'étonne que FF ne trouve pas à redire.

Et le plus simple est encore de zapper ces balises fermantes qui peuvent
être facultatives


Par contre, si comme indiqué:
http://infogerance.asso-polyvalente.fr/trac/changeset/17
Je fais un innerHTML d'un <div>, tout se passe bien.


Là j'ai rien compris à ce qu'on me veut, d'autant qu'on n'y parle pas de
DIVs ...

Pense à changer :
<script language="JavaScript">
par :
<script type="text/javascript">

et pendant que tu y es essaie d'utiliser un doctype
et qu'il soit valide.

De quels éléments (portent-ils un "nom" particulier?) ne peut-on pas
modifier le innerHTML?


Ha Ha ! les dangers du innerHTML ... ici :
http://stephane.moriaux.perso.orange.fr/truc/innerHTML_danger

(où l'on voit que c'est OK pour un table mais pas pour un input)

--
Stephane Moriaux et son (moins) vieux Mac

Avatar
Mihamina (R12y) Rakotomandimby
ASM - <4686cb8c$0$27405$ :

J'ai découvert un "truc" cette nuit: faire un innerHTML d'un <table>
n'est pas conforme.


tout dépend de ...

Prenons un tableau:

http://infogerance.asso-polyvalente.fr/trac/browser/tri_tableau/m.js?rev



Une fonction pour afficher ce tableau:

http://infogerance.asso-polyvalente.fr/trac/browser/tri_tableau/affichage.js?rev



J'aimerais bien savoir ce que représente 't' dans :
var largeur=t[0].length;


Dans t, il y a:
http://infogerance.asso-polyvalente.fr/trac/browser/tri_tableau/m.js

Et le code HTML:
où il est le code html ?



As tu suivi le lien?

Et le plus simple est encore de zapper ces balises fermantes qui peuvent
être facultatives


Arretes...

Par contre, si comme indiqué:
http://infogerance.asso-polyvalente.fr/trac/changeset/17
Je fais un innerHTML d'un <div>, tout se passe bien.
Là j'ai rien compris à ce qu'on me veut, d'autant qu'on n'y parle pas de

DIVs ...


Je t'explique:
Plutot que de modifier le innerHTML d'un table, j'ai "encapsulé" le table
dans un div, et c'est le innerHTML du div que je modifie en table.

J'aurais préféré le premier cas.


Pense à changer :
<script language="JavaScript">
par :
<script type="text/javascript">

et pendant que tu y es essaie d'utiliser un doctype
et qu'il soit valide.

De quels éléments (portent-ils un "nom" particulier?) ne peut-on pas
modifier le innerHTML?


Ha Ha ! les dangers du innerHTML ... ici :
http://stephane.moriaux.perso.orange.fr/truc/innerHTML_danger



Avatar
ASM

Je t'explique:
Plutot que de modifier le innerHTML d'un table, j'ai "encapsulé" le table
dans un div, et c'est le innerHTML du div que je modifie en table.

J'aurais préféré le premier cas.


Chez moi le 1er cas fonctionne partout excepté avec Mon IE5 Mac qui ne
comprend rien à ce 't'
et mon Opera 9 qui n'a pas l'air de s'interreser à ces <td></td></tr>

fichier 'affichage.js' :
function contenu_tableau(t)
{
// alert('tabl long = '+t.length);
var resultat = "<tbody>";
var largeur = t[0].length;
for(var l=0; l < t.length; l++)
{
resultat += "n<tr>";
resultat += "<td>";
resultat += "ligne "+ l ;
resultat += "</td>";
for(var c=0; c < largeur; c++)
{
resultat += "<td>";
resultat += t[l][c];
resultat += "</td>";
}
resultat += "</tr>";
}
resultat += "</tbody>";
//alert(resultat);
return resultat;
}

fichier 'index.htm' :
<html>
<head>
<title></title>
<meta content="">
<script src="m.js" type="text/javascript"></script>
<script src="affichage.js" type="text/javascript"></script>
<style></style>
<script type="text/javascript">
onload = function() {
document.getElementById('stats_pays').innerHTML=contenu_tableau(t);
};
</script>
</head>
<body>
<table style="font-family: sans-serif; background: grey;"
id="stats_pays" border=1 cellspacing=2>
</table>
</body>
</html>


--
Stephane Moriaux et son (moins) vieux Mac

Avatar
Rakotomandimby (R12y) Mihamina
ASM - <4687000d$0$25939$ :

Plutot que de modifier le innerHTML d'un table, j'ai "encapsulé" le
table dans un div, et c'est le innerHTML du div que je modifie en table.
J'aurais préféré le premier cas.
Chez moi le 1er cas fonctionne partout excepté avec Mon IE5 Mac qui ne



http://dev.rubyonrails.org/ticket/8182
C'est un "bug connu".
Bon du coup, moi je dois faire autrement pour afficher un tableau.

--
"C'est très facile d'avoir des idées de partage quand on n'a rien."
Patrice KARATCHENTZEFF,
à propos de certaines idées "de gauche".


Avatar
ASM
ASM - <4687000d$0$25939$ :

Plutot que de modifier le innerHTML d'un table, j'ai "encapsulé" le
table dans un div, et c'est le innerHTML du div que je modifie en table.
J'aurais préféré le premier cas.
Chez moi le 1er cas fonctionne partout excepté avec Mon IE5 Mac qui ne



http://dev.rubyonrails.org/ticket/8182
C'est un "bug connu".


ce qui n'empêche pas mon IE de ne rien comprendre à :

t.push(new Array(8894,31981,31960));

Bon du coup, moi je dois faire autrement pour afficher un tableau.


J'utilise le moins possible innerHTML, cependant il me semble l'avoir vu
utiliser pour des tables et, en effet, c'est pour insérer des tables
complets (y compris les balises table).


--
Stephane Moriaux et son (moins) vieux Mac



Avatar
Olivier Miakinen

Bon du coup, moi je dois faire autrement pour afficher un tableau.


J'utilise le moins possible innerHTML [...]


Tout pareil. Je m'en sers pour insérer du simple texte parce que là
c'est un peu trop verbeux à mon goût avec les fonctions du DOM (et
que innerHTML marche bien pour du texte), mais sinon j'utilise plutôt
appendChild(), cloneNode() et ainsi de suite.