2009-09-25 16 views
1

J'ai un problème avec XML d'analyse syntaxique avec JQuery quand il y a un noeud avec un noeud optionJQuery option XML noeud

<preferences><dashboard> 
<report id="si_pg_vw" order="0"> 
    <header> 
    <data> 
     <option type="reportname" value="Page View"/> 
    </data> 
    </header> 
</report> 

le code suivant dans Firebug retourne pas d'enfant

$reportElement.find("data")[0] 

Cependant, si je change l'option à une autre valeur ("option2", "test", etc.) alors la ligne ci-dessus renvoie un enfant qui est correct.

Est-ce que je mords quelque chose ou y a-t-il un bogue?

Merci

John

+0

Quelques choses: Les '' preferences' et balises dashboard' correctement fermées dans le fichier XML? Que attribuez-vous à la variable '$ reportElement'? Pourquoi utilisez-vous l'indexation dans les résultats de données plutôt que d'itérer sur eux? –

Répondre

1

Peut-être que cela a à voir avec la balise option HTML doit être un enfant de la balise select.

Assurez-vous que le type de contenu de la réponse est 'text/xml'. Cela demandera probablement à jQuery d'analyser la réponse en XML et non en html, reconnaissant ainsi correctement la balise d'option.

+0

Malheureusement, cela vient du serveur, et d'autres applications dépendent de ce nœud étant "option". – John

+0

Voir ma réponse modifiée. Je crois que vous devez définir l'en-tête du type de contenu. – kgiannakakis

1
$reportElement.find("data")[0] 

ne fonctionnera pas. Essayez

$reportElement.find("data:first") 

OU

$reportElement.find("data:eq(0)") 

etc

En outre, vous ne fermons pas 'tableau de bord' et 'préférences' dans votre exemple.

Ceci est l'exemple complet;

var myXML = <preferences> 
       <dashboard> 
       <report id="si_pg_vw" order="0"> 
        <header> 
         <data> 
         <option type="reportname" value="Page View"/> 
         </data> 
        </header> 
       </report> 
      </dashboard> 
      </preferences> 

myXML = jQuery(myXML); 
myXML.find('data option:first'); 
//OR 
myXML.find('data option:eq(0)'); 
//OR 
myXML.find('data option').each(function(){ window.console.log(this) }); 

etc