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 :

innerHTML et eval...


Sujet :

JavaScript

  1. #21
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    Citation Envoyé par GregPeck
    Cette fonction ne clone pas les sous éléments... si par exemple j'essai de cloner un tr, je n'ai aucun td (dans childNodes) dans l'élément cloné, normal ?
    euh ben si elle est censé le faire.
    Enfin sous firefox ça marchera c'est sur, sous ie, y a des bugs
    par exemple apparement ca marche pas sur un <option> dans ie
    Mais sur un tableau ça devrais marcher.
    En fait c'est addChild qui fais le recursif et qui clone element par element.

    ie va peut etre pas aimer hasAttributes() dans clone, tu peux le remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(elem.attributes.length > 0)
    Citation Envoyé par GregPeck
    Merci encore, tu m'a fait découvrir des trucs excellent en javascript, je m'éclate, je comprend maintenant beaucoup mieux la force de js !
    Oui en se plongeant un peu dans le cambouis de js, on devient vite accro car on se rend compte de sa réelle puissance

  2. #22
    Membre chevronné Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Par défaut
    Citation Envoyé par GregPeck
    C'est bon j'ai compris l'intéret de addChild et de ses appels récursifs
    Citation Envoyé par siddh
    En fait c'est addChild qui fais le recursif
    Comme quoi j'avais bien compris

    IE commence à me brouter sévere et le problème c'est que je ne vais pas asser souvent vérifier que le code fonctionne aussi sous IE. Je suis souvent obligé de faire une grande marche arrière, c'est lourd..
    A+

  3. #23
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    Citation Envoyé par GregPeck
    IE commence à me brouter sévere et le problème c'est que je ne vais pas asser souvent vérifier que le code fonctionne aussi sous IE. Je suis souvent obligé de faire une grande marche arrière, c'est lourd..
    A+
    +100

    pareil pour moi

  4. #24
    Membre confirmé

    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Par défaut
    Avez vous trouver comment rendre cette fonction compatible avec IE car ça fonction bien sous FF mais aucun résultat avec IE

  5. #25
    Membre chevronné Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Par défaut
    Tu parle des fonctions addChild et clone ?

    Si oui, je les ai tellement modifier qu'elles ne ressemble plus au code d'origine (d'ailleurs elle ne ressemble plus à rien ). Mais c'est peux être à cause de ce bug que ça ne fonctionne pas:

    http://javascript.developpez.com/faq...M#DOMIEFirefox

    Et voici un nodecleaner:

    http://www.developpez.net/forums/vie...863087#1863087

  6. #26
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    euh ca marche avec ie normalement,
    le problème doit venir d'ailleurs mais effectivement ça peut pas faire de mal de passer au node cleaner

  7. #27
    Membre confirmé

    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Par défaut
    En fait je pense que c'est parce que je charge mal le fichier XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    else if (window.ActiveXObject) {
                this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    			this.xmlDoc.onreadystatechange = function() { if (this.xmlDoc.readyState == 4) this.loaded = true; }
    		    this.xmlDoc.load(url);
    }
    Avec ça je peut accéder aux données mais les fonction clone et addChild ne semble pas fonctionner et j'ai l'erreur
    'this.xmlDoc.readyState' a la valeur Null ou n'est pas un objet
    J'ai aussi essayé comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    else if (window.ActiveXObject) {
          		try {
                    this.xmlDoc = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    this.xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
                }
                this.xmlDoc.onreadystatechange = function() { if (this.xmlDoc.readyState == 4) this.loaded = true;}
                this.xmlDoc.open('GET', url, true);
    Mais au chargement de la page j'ai une boite de dialogue avec Object Error

  8. #28
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    euh tu récupère jamais le responseXML ?
    http://siddh.developpez.com/articles/ajax/

  9. #29
    Membre confirmé

    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Par défaut
    Ca change du sujet initial mais la discussion a déjà commencé ici donc j'expose mon problème...

    En fait je n'arrive pas à placer le responseXML voici comment mon code se présente: j'ai deux classes, une qui s'occupe de parser un fichier XML c'est aussi cette classe qui s'occupe de charger le fichier, l'autre classe elle traite les données en prenant en paramètre l'objet créé par la classe précédente...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    var news   = new xmlParser();
    var post   = new xmlManager(news);
     
    news.loadXML('./news.xml');
    ...
    <body onload="post.buildNews()">
    ...
    loadXML :
    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
    function loadXML(url)
    {
    	/* chargement du fichier XML */
    	try {
    		// navigateur basé sur Gecko
    		if (document.implementation && document.implementation.createDocument)
    		{
    			this.xmlDoc = document.implementation.createDocument('', 'doc', null);
    			this.xmlDoc.load(url);
    		// à l'aide de lobjet XMLHTTPRequest
    		} else if (window.XMLHttpRequest) {
          		this.xmlDoc = new XMLHttpRequest();
          		this.xmlDoc.overrideMimeType('text/xml'); 
          		this.xmlDoc.onreadystatechange = function() { if (this.xmlDoc.readyState == 4) this.loaded = true; }
          		this.xmlDoc.open('GET', url, true);
          		this.xmlDoc.send(null);
          	// ActiveX pour Internet Explorer
          	} else if (window.ActiveXObject) {
                try {
    				this.xmlDoc = new ActiveXObject("Msxml2.XMLHTTP");
    			} catch (e) {
    				this.xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
    			}
    			this.xmlDoc.onreadystatechange = function() { if (this.xmlDoc.readyState == 4) this.loaded = true; }
    		    this.xmlDoc.open('GET', url, true);
          		this.xmlDoc.send(null);
    		}
    	} catch (e) {
    		alert(e);
    		return false;
    	}
    	return true;
    }
    Il me faut donc xmlDoc comme étant un objet XML ce que me retourne this.xmlDoc = document.implementation.createDocument('', 'doc', null); par contre les autres test me retourne un objet xhr dans lequel se trouve l'objet XML qui m'intéresse responseXML...

    Jusque là je ne vous apprend rien ...
    Le problème c'est que dans cette fonction responseXML est null et d'après ce que j'ai pu constater il ne se remplit que lorsque je sort de la classe ou un truc du genre...

    Pour résumer, responseXML est vide lors du chargement mais est remplit lorsque j'arrive à la fonction buildNews de la classe xmlManager !!! Du coup lors du chargement, je ne peux pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.xmlDoc = this.xmlDoc.responseXML;
    vu que celui-ci est vide...

    J'espère que vous avez réussit à me suivre ...

  10. #30
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    hum, je voit deja pas trop a quoi ca sert de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (document.implementation && document.implementation.createDocument)
          {
             this.xmlDoc = document.implementation.createDocument('', 'doc', null);
             this.xmlDoc.load(url);
          // à l'aide de lobjet XMLHTTPRequest
          }
    Ensuite, pourquoi mettre deux onreadystatechange différents ?

    Et c'est justement a cet endroit là que tu vas récupérer le responseXML.
    Enfin tu vas meme pas lui affecter puisque le responseXML est déja dedans !!!!

  11. #31
    Membre confirmé

    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Par défaut
    Mais comment faire après pour accéder aux fonctions de mon parseur afin de traiter le fichier???
    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
    function xmlParser()
    {
    	/* méthodes de la classe */
    	this.loadXML 				  = loadXML;					// chargement du fichier XML
    	this.clean 					  = clean;						// supprime les espaces du fichier XML
    	this.countNode				  = countNode;					// compte le nombre de noeud
    	this.getRoot 				  = getRoot;					// obtenir la racine du document
    	this.getParent 				  = getParent;					// obtenir le parent d'un noeud
    	this.getChild 				  = getChild;					// obtenir les fils d'un noeud
    	this.getNode 				  = getNode;					// obtenir les noeuds selon la balise
    	this.getNodeName 			  = getNodeName;				// obtenir le nom du noeud
    	this.getNodeValue 			  = getNodeValue;				// obtenir la valeur du noeud
    	this.getAttributeValue 		  = getAttributeValue;			// obtenir la valeur des attributs d'un noeud
    	this.findNodeByValue 		  = findNodeByValue;			// recherche un noeud par sa valeur
    	this.findNodeByAttributeValue = findNodeByAttributeValue;	// recherche un noeud par la valeur de son attribut
     
    	/* membres publiques */
    	this.xmlDoc;												// objet contenant le fichier XML
    	this.loaded = false;										// état de chargement du fichier XML
    }
    Je ne peux pas faire xmlDoc.responseXML.getNode(); par exemple...
    Je commence à avoir mal à la tête moi...

  12. #32
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    pour l'exploitation du responseXML, c'est le documentElement du responseXML qu'il faut manipuler avec le DOM

  13. #33
    Membre confirmé

    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Par défaut
    J'arrive maintenant à exploiter le fichier XML avec xhr mais une dernière question car je trouve que la technique employé "pas très propre"...

    En fait, je ne vois pas quand responseXML se remplit or à la sortie de ma fonction loadXML je ne veux pas un objet xhr mais un objet xml donc puisqu'il est remplit dans la classe qui traite le fichier je fais...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    obj.xmlDoc = obj.xmlDoc.responseXML.documentElement;
    mais j'aurrais préféré que cela soit fait dans la fonction loadXML...

    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    this.xmlDoc.onreadystatechange = function() {
        if (this.xmlDoc.readyState == 4) this.xmlDoc = this.xmlDoc.responseXML.documentElement;
    };
    dans la fonction loadXML mais ça ne marche pas et me retourne toujours xmlDoc comme un objet xhr...

    Comment faire pour avoir un objet xml à la sortie de ma fonction loadXML???

  14. #34
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    tu ne peux pas car c est une discussion asynchrone !

    sinon tu peux faire une discussion synchrone qui bloquera le traitement tant que tu n'as pas eu la réponse.

    Auquel cas, plus besoin du onreadystatechange.

    Tu construit ton xhr, tu envoie la requete en lui passant false en 3eme argument du open et à la ligne en dessous tu fais un return du responseXML.documentElement

  15. #35
    Membre confirmé

    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Par défaut
    Très bien merci beaucoup de ton aide...
    Mais là étant en synchrone, cela veut dire que ma page html arrêtera de se charger tant que le fichier XML n'aura pas finit de se charger???
    Je ne pense pas que ça sera un problème sauf si le fichier XML est très gros...

  16. #36
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    Tu as tout compris

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [POO] Fonction eval() - innerHTML
    Par allian dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/03/2009, 08h23
  2. Existe-t-il une fonction Eval() sous Delphi ?
    Par Hell dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2004, 17h45
  3. pb eval pour le code php dans une feuille xslt
    Par nipepsi dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 10/09/2004, 11h23
  4. [String] équivalent de la fonction eval() en javascript
    Par jeyce dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 01/09/2004, 08h42
  5. [langage] eval
    Par Quaker dans le forum Langage
    Réponses: 5
    Dernier message: 21/07/2004, 17h16

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