2010-09-09 5 views
8

Tous les exemples de jQuery.append() semblent prendre une chaîne html et l'ajouter à un conteneur. J'ai un cas d'utilisation légèrement différent. Mon serveur me renvoie un XML qui contient du texte HTML à afficher, quelque chose comme:jQuery add DOM

<event source="foo"> 
    <contents> 
     <h1>This is an event</h1> 
     This is the body of the event 
    </contents> 
</event> 

J'ai un div où ce contenu doit être affiché.

Mon JS fait actuellement les suivantes:

  1. les charges de données XML dans jQuery dans le gestionnaire de succès .ajax $():

    var jdata = $ (données);

  2. Trouver la balise de contenu et tente d'ajouter ses enfants à la div qui est censé afficher l'événement:

    var contents = jData.find("contents"); 
    if(contents != null) 
    { 
        $(contents).children().each(function(index, value) 
        { 
        $("#eventDiv").append($(value)); 
        }); 
    } 
    

Append appel() échoue avec Uncaught Erreur: WRONG_DOCUMENT_ERR: DOM Exception 4 sur Chrome. Le débogueur montre la valeur à un objet DOM élément et $ (valeur) pour être un objet qui contient l'élément .

Toute aide sera appréciée.

Merci. -Raj

Répondre

8

Vous ne pouvez pas ajouter de nœuds appartenant à une arborescence DOM à un autre document.

Essayez de les clone:

$("#eventDiv").append(jData.find("contents").children().clone()); 

ou tout simplement utiliser leur représentation textuelle de les recréés:

$("#eventDiv").append(jData.find("contents").html()); 
+0

Merci. Clone() semble me faire avancer. Pourtant, appeler html() provoque l'erreur: $ (enfant) .clone(). Html(): TypeError: Impossible d'appeler la méthode 'replace' de – Raj

+0

en fait j'utilise contents(). Clone() qui inclut également des nœuds de texte. – Raj

+0

@raj: Le '.html()' échoue parce que vous avez affaire à un document XML ici, et jQuery n'est pas 100% adapté pour traiter XML dans tous les cas. – Tomalak