2009-10-09 8 views
6

Ho appena iniziato con dojo e ho capito che dojo.query è lo stesso di $ in jQuery.Cosa restituisce dojo.query()?

Ma non ho capito cosa restituisce. È un oggetto specializzato come in jQuery?

Quello che sto cercando di fare (senza fortuna) è:

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); 

E Attualmente sto usando la nuova html5 elements:

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

E io non riesco a trovare una buona lista su cosa fare con gli oggetti restituiti da dojo.query() ..

edit: Va bene, penso che dojo è solo scherzi con me ora. Ho trovato questo metodo: addContent() e funziona sul selettore precedente. Ma non voglio aggiungere contenuto, voglio sostituire il contenuto ...

risposta

3

Il metodo query restituisce un oggetto NodeList.

Nel riferimento per NodeList è possibile trovare un elenco di funzioni che è possibile applicare all'elenco di elementi. Non esiste una funzione innerHTML per l'elenco, ma la funzione html dovrebbe funzionare.

Non c'è alcun elemento "output" in HTML, forse si prova a targetare gli elementi con il nome della classe "output"?

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

Oppure l'elemento con ID "output"?

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

No, ho sto usando l'elemento 'output' HTML5, ma per essere sicuro di aver provato ad aggiungere un id all'elemento, e di fare lo stesso ... ancora nessun risultato. – peirix

+0

@peirix: capisco. Per utilizzare l'elemento di output è necessario impostare l'attributo value, non la proprietà innerHTML. – Guffa

+0

L'elemento di output funziona come un div. È solo un content holder, quindi non ha un attributo value. http://www.w3schools.com/tags/html5_output.asp Ma non riesco ancora a far funzionare il metodo 'html()', anche su 'div's ... – peirix

0

Inoltre, v'è un wrapper dojox.jq (in fase di sviluppo, venendo in 1.4) che emula le API oggetto jQuery di ritorno

1

come si è detto, il metodo query restituisce oggetto NodeList, in modo da poter scorrere è risultato sotto forma di array, o metodi dojo uso che lavorano con NodeList (ad es attr):

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

Ma non appena si sta cercando di interrogare i nodi di id, sarebbe meglio usare dojo.byId() metodo , che restituisce domNode:

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

o in più dojo stile:

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

Se si desidera sostituire il contenuto tutti i tag di uscita con la stessa cosa, allora questo codice dovrebbe sempre lavorare:

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

Dojo fornisce anche una piccola scorciatoia per questo tipo di cose. È possibile specificare una stringa alla funzione foreach NodeList come questo:

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

La parola voce nella stringa è speciale. (Questo è un problema di debug, quindi potrebbe non valerne la pena.)

1

Prova questa aggiungendo il [0] in questo modo:

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

La documentazione sembra essere un disastro, questa è l'unica cosa che ho potuto lavorare con 1,7,

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