2009-10-09 6 views
6

Je commence juste avec dojo, et j'ai compris que dojo.query est le même que $ dans jQuery.Que retourne le fichier dojo.query()?

Mais je n'ai pas compris ce que ça rapporte. Est-ce un objet spécialisé comme dans jQuery?

Ce que je suis en train de faire (sans chance) est:

dojo.query("output").innerHTML = data; 
//this doesn't work either: 
dojo.query("output").html(data); 
//tried accessing by id as well 
dojo.query("#output").html(data); 
//and tried to access a div, incase dojo has some issues with html5 elements 
dojo.query("#divOutput").html(data); 

Je suis actuellement en utilisant la nouvelle html5 elements:

<output id="output">Output goes here</output> 
<div id="divOutput">non-html5 output goes here</div> 

Et je ne peux pas sembler trouver une bonne liste sur ce qu'il faut faire avec les objets retournés par dojo.query() ..

modifier: d'accord, je pense que dojo est juste de jouer avec moi maintenant. J'ai trouvé cette méthode: addContent() et cela fonctionne sur le sélecteur ci-dessus. Mais je ne veux pas ajouter de contenu, je veux remplacer le contenu ...

Répondre

3

La méthode de requête retourne un objet NodeList.

Dans la référence pour NodeList vous pouvez trouver une liste de fonctions que vous pouvez appliquer à la liste des éléments. Il n'y a pas de fonction innerHTML pour la liste, mais la fonction html devrait fonctionner.

Il n'y a pas d'élément "output" en HTML, peut-être que vous essayez de cibler des éléments avec le nom de classe "output"?

dojo.query(".output").html(data) 

Ou l'élément avec l'ID "sortie"?

dojo.query("#output").html(data) 
+0

Non, je J'utilise l'élément HTML5 'output', mais juste pour être sûr d'avoir essayé d'ajouter un identifiant à l'élément, et de faire la même chose ... toujours pas de résultat. – peirix

+0

@peirix: Je vois. Pour utiliser l'élément output, vous devez définir son attribut value, pas sa propriété innerHTML. – Guffa

+0

L'élément de sortie fonctionne comme un div. C'est juste un détenteur de contenu, donc il n'a pas d'attribut de valeur. http://www.w3schools.com/tags/html5_output.asp Mais je n'arrive toujours pas à faire fonctionner la méthode 'html()', même sur 'div's ... – peirix

0

En outre, il y a une enveloppe dojox.jq (en développement, venant 1.4) qui émule les API de l'objet de retour JQuery

1

Comme il a été dit ci-dessus, la méthode de requête renvoie objet NodeList, de sorte que vous pouvez itérer il est le résultat sous forme de tableau, ou utiliser des méthodes de dojos qui travaillent avec NodeList (par exemple attr):

dojo.query("#divOutput").attr("innerHTML", data); 

Mais dès que vous essayez d'interroger les noeuds par id, il serait préférable d'utiliser la méthode dojo.byId() , qui renvoie domNode:

dojo.byId("divOutput").innerHTML = data; 

Ou dans plus de style dojo:

dojo.attr(dojo.byId("divOutput"), "innerHTML", data) 
3

Si vous voulez remplacer tous les balises de sortie du contenu de la même chose, alors ce code devrait toujours fonctionner:

// replace the contents of ALL <output> tags 
dojo.query('output').forEach(function(node) { node.innerHTML = data; }); 

Dojo fournit également un petit raccourci pour ce genre de choses. Vous pouvez spécifier une chaîne à la fonction foreach NodeList comme ceci:

// replace the contents of ALL <output> tags (as long as data is global) 
dojo.query('output').forEach("item.innerHTML = data;"); 

Le mot article dans la chaîne est spéciale. (C'est une douleur à déboguer, donc ça ne vaut peut-être pas la peine.)

1

Essayez en ajoutant l'[0] comme ceci:

dojo.query("output")[0].innerHTML = data; 
0

La documentation semble être un gâchis, c'est la seule chose que je travaille avec 1,7,

dojo.query("whatever").forEach(function(node, index, array) 
{ 
    node... 
}); 
Questions connexes