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 :

[DOM] DOM, Incompatibilité Firefox IE getElementsByTagName


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Par défaut [DOM] DOM, Incompatibilité Firefox IE getElementsByTagName
    Bonjour !

    Voilà j'ai un petit problème en AJAX et en DOM.

    Je vais expliquer en bref ce que fait mon application.
    J'utilise des servlets JAVA pour aller chercher des enregistrements dans une base de données, ce servlet JAVA va me parser mes résultats en XML. Aucun problème jusque là. Ensuite dans une page JSP je récupère ces données dynamiquement grâce à un script Javascript avec le XMLHttpRequest. Toujours aucun problème jusque là. Le script va également mettre en page les enregistrements dans des tableaux, chaque ligne du tableau déclenche une autre action (une création d'une infobulle). Dans l'infobulle je met le détail complet des enregistrements "séléctionnés", sous Firefox ce script ne pose aucun problème mais sous IE non.


    Voici un aperçu du XML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <TABLE>
     <ROW>
      <PRPRD.NUM FR="N°" show="true">1</PRPRD.NUM>
      <PRPRD.DES FR="Nom" show="true">TEST #1</PRPRD.DES>
      <PRPRD.OWC FR="Code" show="true">P1</PRPRD.OWC>
      <PRPRD.XDS FR="Description" show="true"/>
      <SAENT.COD FR="Code" show="false">TST</SAENT.COD>
      <WHPRD.PHQ FR="Quantité">140</WHPRD.PHQ>
      <PRICELIST FR="Prix" show="true">
       <PRICE show="true" SAEPLE.VAL="500.25" SAEPLE.QTY="1.0" SAEPLE.UNT="DFT" SAEPLE.FDT="2000-01-01" SAEPLE.TDT="2010-01-01"/>
      </PRICELIST>
     </ROW>
    </TABLE>
    Et voici la partie du code qui foire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function getContent(file,id,xhr)
    {
    	res = xhr.responseXML.getElementsByTagName("TABLE"); 
    	if(res != null)
    	{
    		rows = (res.item(0)).getElementsByTagName("ROW");
    		if(rows[0].length != 0)
    		{
    ...
    C'est cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rows = (res.item(0)).getElementsByTagName("ROW");
    Qui pose problème, pourtant j'ai essayé de cette façon aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rows = res[0].getElementsByTagName("ROW");
    Mais ça ne marche pas non plus.


    Est-ce que quelqu'un aurait une idée ?

    Merci

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salux

    Je sais pas si ça a un rapport, mais je suis pas sur que les points soient autorisés dans les balises xml (et les attributs)..
    Si c'est ça, peut etre que IE ne considere pas le document xml retourné comme valide et ne peut executer aucune requete dom

    Sinon, au lieu de recuperer les elements TABLE puis les elements ROW contenus dedans, j'aurais tendance à recuperer directement les elements ROW puisque TABLE est l'élement racine et il ne peut yen avoir qu'un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rows = xhr.responseXML.getElementsByTagName("ROW");

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Par défaut
    Pour ta première remarque (XML non valide) ça m'étonnerai puisque aussi bien IE que FF indiquent lorsqu'il y a des problèmes de syntaxe. De plus si mon XML n'était pas bien formé alors il afficherai pas le tableau (étant donné que c'est le même fichier XML).

    Pour ta deuxième remarque ce n'est pas possible car le fichier XML peut être "vide" alors dans ce cas là il va se former de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <TABLE>
      <NONE/>
      <URL>ShowReception.do</URL>
    </TABLE>
    (La balise <URL> est simplement pour me permettre une uniformité du code)


    Merci quand même

  4. #4
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Il suffirait dans ce cas de tester si "rows" est null au retour de getElementsByTagName ,)
    Mais ceci resoud pas ton pb dfaçons

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Par défaut
    Non effectivement !

    Mais merci de t'inquièter de l'optimisation de mon application


    Personne d'autre n'aurai une idée ??

  6. #6
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    hello

    quand tu dis que ça ne marche pas, c'est que tu as débuggé le script et remarqué que row est null, ou c'est parce que le traitement du if ne se fait pas ?

    si c'est le 2è cas alors c'est à cause de la condition qui est incorrecte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(rows[0].length != 0)
    alors qu'il faut
    non ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Par défaut
    Juste pour le test j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function getContent(file,id,xhr)
    {
    	rows = xhr.responseXML.getElementsByTagName("ROW"); 
    	if(rows != null)
    	{
    		Content = '<table border="0" cellpadding="0" cellspacing="0">';
                    alert(rows);
    		alert(rows.length);
    		alert(rows[0].childNodes.length);
    ...

    Sous FF ça donne :

    [ObjectHTML Collection]
    1
    19

    Sous IE ça donne

    [object]
    0

    Et puis une erreur : Objet requis




    C'est vraiment la mierda ces problèmes de compatibilité !

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Par défaut
    Personne ?

    La fonction DOM pour récupérer l'élément est quand même NodeList.item(i)

    Pourquoi ça fonctionne sur FF et pas IE ?

    Merci

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Par défaut
    Personne n'a vraiment aucune solution ? S'il vous plait !

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    dasn les contributions il y a une bibliothèque pour la gestion des balises XML avec DOM ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Par défaut
    http://www.developpez.net/forums/sho...&highlight=dom


    Utilser l'objet IXmlDom. Référez vous à la documentation et au code de l'objet.

    C'est ça qui est susceptible de savoir m'aider ?

    Parce que si c'est ça alors je sais pas ce que c'est qu'un objet IXMLDom. J'ai cherché et ils en parlent dans la msdn mais je comprends pas comment l'utiliser.

  12. #12
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Citation Envoyé par thegreatbato
    Pour ta première remarque (XML non valide) ça m'étonnerai puisque aussi bien IE que FF indiquent lorsqu'il y a des problèmes de syntaxe. De plus si mon XML n'était pas bien formé alors il afficherai pas le tableau (étant donné que c'est le même fichier XML).
    Ce n'est pas tout à fait vrai : les navigateurs signalent bien les erreurs javascript, mais pas forcément les erreurs XML. Ce qui m'amène à ton autre remarque :
    Sous FF ça donne :
    [ObjectHTML Collection]
    1
    19

    Sous IE ça donne
    [object]
    0
    Sous IE7 + XP + fichier XML, getElementsByTagName() renvoie une HTMLCollection. Si tu obtiens juste un 'object', c'est que tu as un problème. Retour au point 1 : j'ai constaté sur une appli Ajax sur laquelle je travaille que Firefox était beaucoup plus tolérant aux XML invalides que IE. Je suis donc fortement tenté de penser que malgré tout, ton fichier XML n'est pas validé par IE.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Par défaut
    Hum oui tu as peut être raison,

    Voilà mon fichier XML que le serveur me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?xml version='1.0' encoding='ISO-8859-1'?>
    <TABLE><ROW><TRCUS.TRD FR="N°" show="false">8</TRCUS.TRD>
    <TRTRD.NAM FR="Nom" show="true">HALL22</TRTRD.NAM>
    <GPLAN.DES FR="Langue" show="true">French</GPLAN.DES>
    <TRTRD.AD1 FR="Adr.1" show="true">Hall 22 S.A.</TRTRD.AD1>
    <TRTRD.AD2 FR="Adr.2" show="false"></TRTRD.AD2>
    <TRTRD.AD3 FR="Adr.3" show="false">Rue Pasquier Grenier 4</TRTRD.AD3>
    <TRTRD.AD4 FR="Adr.4" show="false"></TRTRD.AD4>
    <GPCTR.DES FR="Pays" show="true">Belgium</GPCTR.DES>
    <TRTRD.ZIP FR="C.P." show="true">7500</TRTRD.ZIP>
    <TRTRD.CIT FR="Ville" show="true">TOURNAI</TRTRD.CIT>
    <TRTRD.TEL FR="Tel." show="false"></TRTRD.TEL>
    <TRTRD.GSM FR="Gsm" show="false"></TRTRD.GSM>
    <TRTRD.FAX FR="Fax" show="false"></TRTRD.FAX>
    <TRTRD.EML FR="E-mail" show="false"></TRTRD.EML>
    <TRTRD.WBS FR="Website" show="false"></TRTRD.WBS>
    <TRTRD.FNM FR="Nom" show="true"></TRTRD.FNM>
    <TRTRD.LNM FR="Prénom" show="true"></TRTRD.LNM>
    <TRTRD.BRD FR="Date de n." show="false">2000-01-01</TRTRD.BRD>
    <TRTRD.CRD FR="Création" show="false">2007-01-01</TRTRD.CRD>
    </ROW>
    <URL>ShowStock.do</URL>
    </TABLE>
    Les retours a la ligne ne sont pas a prendre en compte, je les ai mis juste pour que ça sois plus clair.

    Peut-être est-ce le fait que je mette des . dans les description des balises, mais là encore je comprends pas pourquoi la création de la table marche mais pas l'infobulle, c'est le même objet XML qui est appellé ...

    Merci

  14. #14
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Citation Envoyé par thegreatbato
    Peut-être est-ce le fait que je mette des . dans les description des balises, mais là encore je comprends pas pourquoi la création de la table marche mais pas l'infobulle, c'est le même objet XML qui est appellé ...
    En effet, c'est incohérent. Si IE a un problème avec ton XML, il doit l'avoir dès le début. Cela dit :
    1 - j'ai dit des conneries IE7 récupère un "object" et non pas un HTMLCollection (trop de navigateurs ouverts sur mon bureau, j'ai pas appuyé sur le bon bouton... )
    2 - ton fichier XML est bien valide. Je viens de vérifier sous XMLSpy
    Donc j'ai tort.

    Hum... Je sais que le getElementsByTagName() marche sous IE, de même que les appels par item() et operator[] car j'ai plein de code avec ça sous la main. En fait, ton souci vient de ce que sous IE ton nodeList a été vidé de ses noeuds ou remplacé par autre chose. Avec un simple type 'object', difficile à savoir.

    Que se passe t'il entre la création de ta table (qui marche) et l'écriture des infobulles (qui ne marche pas) ?

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Par défaut
    Aucune méthode n'est lancée après la création des tables sauf si ce n'est que l'appel de la méthode bulle(which, file, id)

    ou which est un booleen pour montrer / cacher, file est l'URL de l'action Java, et id est l'identifiant de la ligne.

    Voici la totalité de mon code de l'infobulle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    /*
     * ContentInfo		chaine de caractères contenant le html de l'infobulle (après le <hr>)
     * mouse_X,mouse_Y	entier qui contient en permanence la position de la souris sur la page 
     * e				variable nécessaire à tout navigateur autre que IE (c'est l'objet evenement)
     */
    Content = "";
    var mouse_X;
    var mouse_Y;
    var e;
    var tip_active = 0;
    var agt=navigator.userAgent.toLowerCase();
    var is_opera = (agt.indexOf("opera") != -1);
    var is_konq = (agt.indexOf('konqueror') != -1);
    var is_safari = ((agt.indexOf('safari')!=-1)&&(agt.indexOf('mac')!=-1))?true:false;
    var is_khtml  = (is_safari || is_konq);
    var is_ie = ((agt.indexOf('msie') != -1)&&(!is_opera)&&(!is_khtml));
     
    function bulle(which, file,id)
    {
    	/*
    	 * Fonction appellée par un survol d'une zone, c'est la fonction principale
    	 * which = 1 si on veut la montrer, which = 0 si on veut cacher
    	 * file est le nom du fichier ou il doit aller chercher les résultats XML pour plus d'informations
    	 * ID est l'identifiant qu'on veut "détailler"
    	 */
    	if(which==1)
    	{
    		update_tip_pos();
    		tip_active = 1;
    		var xhr = getXhr();
    		Content = "<img src='img\\spinner.gif' /> Chargement ... ";
    		document.getElementById('ToolTip').style.visibility = "visible";
    		document.getElementById('ToolTip').innerHTML = EnterContent('Informations Complémentaires', Content);
    		if(xhr!=null)
    		{
    			xhr.onreadystatechange = function() 
    			{
    				//document.getElementById(objet).innerHTML = contentCharge;
    				if(xhr.readyState == 4 && xhr.status == 200)
    				{
    					document.getElementById('ToolTip').innerHTML = EnterContent('Informations Complémentaires', getContent(file,id,xhr));
    				}
    			}
    			xhr.open("GET",file+"?id="+id,true);
    			xhr.send(null);
    		}
    	}
    	if(which==0)
    	{
    		tip_active = 0;
    		document.getElementById('ToolTip').style.visibility = "hidden";
    	}
    }
     
    function update_tip_pos()
    {
    	/*
    	 * Modifie les propriétés de la tooltip (la déplace en fonction des mouvements de la souris)
    	 */
     	document.getElementById('ToolTip').style.left = mouse_X + 10 + "px";
    	document.getElementById('ToolTip').style.top  = mouse_Y + 10 + "px";
    }
     
    function getMouseXY(e) 
    {
    	/*
    	 * Récupère la position de la souris à chaque mouvement de celle-ci
    	 * 
    	 * Si on est sur Internet Explorer (if(is_ie == true)) il faut utiliser l'objet window.event
    	 * Si on est sur un autre explorateur on doit utiliser l'objet crée par l'appel de cette fonction (e)
    	 */
    	if(is_ie)
    	{
    		e = window.event;
    		mouse_X = e.clientX + document.body.scrollLeft;
    		mouse_Y = e.clientY + document.body.scrollTop;
    	}
    	else
    	{
    		mouse_X = e.pageX + document.body.scrollLeft;
    		mouse_Y = e.pageY + document.body.scrollTop;
    	}
     
    	if (mouse_X < 0){mouse_X = 0;}
    	if (mouse_Y < 0){mouse_Y = 0;}
    	if(tip_active)
    	{
    		update_tip_pos();
    	}
    }
     
    function EnterContent(TTitle, TContent)
    {
    	/*
    	 * Génération du code HTML pour la table de l'infobulle et retour pour l'appel futur
    	 * Utilisation de la CSS pour l'affichage
    	 */
    	ContentInfo = '<table border="0" cellspacing="0" cellpadding="0"><tr><td width="15" height="15" class="idx_h_g"></td><td height="15" class="idx_h"></td><td width="15" height="15" class="idx_h_d"></td></tr>'+
    				  '<tr><td width="15" class="idx_g"></td><td><table border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#FFFFFF">'+
    				   '<tr><td class="tooltiptitle" align="center">'+TTitle+'<hr class="normal" /></td></tr>'+
    				   '<tr><td class="tooltiptext">'+TContent+'</td></tr>'+
    			       '</table></td><td width="15" class="idx_d"></td></tr><tr><td width="15" height="15" class="idx_b_g"></td><td height="15" class="idx_b"></td><td width="15" height="15" class="idx_b_d"></td></tr></table>'
    	return ContentInfo;
    }
     
    function opendet(id) 
    {
    	if(is_ie)
    	{
    		window.showModalDialog("Details.do?id="+id,"details","dialogWidth:300px;dialogHeight:300px;center:1;scroll:0;help:0;status:0");
    	}
    	else
    	{
    		features="width=300,location=no,status=no,toolbar=no,scrollbars=no,modal=yes,left="+mouse_X+",top="+(mouse_Y+100);
    		window.open('Details.do?id='+id,"details",features);
    	}
    }
    function getContent(file,id,xhr)
    {
    	/*
    	 * Lorsque la page XML est bien chargée on affiche les résultats dans l'infobulle
    	 */
    	response = clean(xhr.responseXML.documentElement);
    	rows = response.getElementsByTagName("ROW"); 
    	if(rows != null)
    	{
    		Content = '<table border="0" cellpadding="0" cellspacing="0">';
    		alert(rows);
    		alert(rows.baseURI);
    		for(i=0; i<rows[0].childNodes.length; i++)
    		{
    			if(rows[0].childNodes[i].nodeName != null)
    			{
    				Content += '<tr><td><strong>'+rows[0].childNodes[i].attributes[0].nodeValue+' :&nbsp;&nbsp;</strong></td>';
    			}
    			if(rows[0].childNodes[i].childNodes[0] !=null)
    			{
    				if(rows[0].childNodes[i].nodeName != null && rows[0].childNodes[i].nodeName != "PRICELIST")
    				{
    					Content +='<td>'+rows[0].childNodes[i].childNodes[0].nodeValue+'</td>';
    				}
    				else
    				{
    					list = rows[0].childNodes[i];
    					if(list.childNodes[0].nodeValue == null || list.childNodes[0].nodeValue != "NO")
    					{
    						for(k=0; k<list.childNodes.length; k++)
    						{
    							Content += '<td>'+list.childNodes[k].attributes[1].nodeValue+"<br />";
    						}
    					}
    					else
    					{
     
    					}
    				}
    			}
    			else
    			{
    				Content +='</strong></td><td></td>';
    			}
    			Content +='</tr>';				
    		}
    		Content += '</table>';
    	}
    	else
    	{
    		Content = 'Une erreur est survenue';
    	}
    	return Content;
    }
    function go(c){
    	if(!c.data.replace(/\s/g,''))
    		c.parentNode.removeChild(c);
    }
     
    function clean(d){
    	var bal=d.getElementsByTagName('*');
     
    	for(i=0;i<bal.length;i++){
    		a=bal[i].previousSibling;
    		if(a && a.nodeType==3)
    			go(a);
    		b=bal[i].nextSibling;
    		if(b && b.nodeType==3)
    			go(b);
    	}
    	return d;
    }

  16. #16
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Bon, ça ne résoud rien, c'est juste pour info :
    - J'ai essayé de simuler, ça avec mes propres objets Ajax : tout baigne sous IE. Mais mes objets ne passent pas la callback exactement comme tu le fais (puisqu'ils encapsulent le XmlHttpRequest). Il doit y avoir un truc là dessous, peut-être lié à la façon dont tu transmets les arguments dans ta callback. A vérifier mais je n'ai pas le temps tout de suite.
    Deux observations au passage :
    1 - ta fonction getContent() n'utilise ni 'file' ni 'id'. Arguments inutiles ou oubli ?
    2 - Document ou Element.getElementsByTagName() ne renvoie jamais null. On a toujours un NodeList en sortie, éventuellement vide.

    Essaye peut-être de faire un dump de xhr au début de getContent() pour voir ce qu'il y a dedans exactement.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Par défaut
    Non je n'ai ni oublié et ce n'est pas des arguments inutiles, regarde je les réutilise dans un appel de fonction après.

    Heu c'est quoi un callback et un dump du xhr ?

    Déso de te prendre ton temps lol

    Edit : Plutôt comment on fait un dump ?

  18. #18
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    C'est ce que j'allais proposer, il s'agit simplement de scanner les propriétés et methodes de l'objet avec une boucle for(prop in obj.properties) et eventuellement de faire la meme chose si une methode est elle meme un objet (en mettant une garde en nombre d'appels imbriqués pour eviter les boucles infinies)
    Suivant les methodes/propriétés qui apparaissent, on peut mieux se faire une idée sur la nature de l'objet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(var prop in obj.properties) {
      alert (prop + ' : "' + obj.properties[prop] + '"');
    }

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Par défaut
    Heu ok mais que représente le prop et que représente le obj dans mon cas ?

    C'est ce que j'aurai aimé faire, afficher l'état de l'objet mais je savais pas comment faire.

  20. #20
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Tu pourrais introspecter l'objet xhr, ainsi que l'objet retourné par getElementsByTagName

    Note, l'outil de dev web de IE peut peut etre permettre d'avoir la liste des propriétés en live, mais je l'ai presque pas utilisé encore, enfin avec Firebug pour firefox ça serait possible

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [DOM] Incompatibilité Firefox IE getElementsByTagName (SUITE)
    Par dr.krusty dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 22/02/2010, 13h59
  2. [DOM] Longueur 0 retournée par getElementsByTagName !
    Par DidRocks dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 10/11/2007, 13h13
  3. [DOM] Javascript et firefox
    Par Empty_body dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 28/07/2007, 08h25
  4. [DOM] compatibilité IE, FireFox
    Par metalpetsFR dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 18/04/2006, 11h16
  5. [DOM] DOM xml firefox et ie
    Par topolino dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 11/01/2006, 22h12

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