2009-10-09 23 views
6

Po prostu zaczynam od dojo i zrozumiałem, że dojo.query jest takie samo jak $ w jQuery.Co zwraca funkcja dojo.query()?

Ale nie zorientowałem się, co powraca. Czy jest to specjalistyczny obiekt, jak w jQuery?

Co usiłuję zrobić (bez powodzenia) wynosi:

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

A obecnie używam nowy html5 elements:

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

I nie wydaje się znaleźć dobra lista, co zrobić z obiektami zwróconymi przez dojo.query() ..

edytuj: OK, myślę, że dojo właśnie ze mną teraz rozmawia. Znalazłem tę metodę: addContent() i działa na powyższym selektorze. Ale nie chcę dodawać treści, chcę zastąpić treść ...

Odpowiedz

3

Metoda zapytania zwraca obiekt NodeList.

W podpunkcie NodeList można znaleźć listę funkcji, które można zastosować do listy elementów . Nie ma funkcji innerHTML dla tej listy, ale funkcja html powinna działać.

Nie ma elementu "output" w HTML, być może próbujesz kierować elementy z nazwą klasy "output"?

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

Czy element z identyfikatorem "wyjście"?

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

Nie, ja "Używam elementu HTML5" output ", ale po prostu mam pewność, że próbowałem dodać id do elementu, i robiąc to samo ... nadal nie ma wyniku. – peirix

+0

@peirix: Rozumiem. Aby użyć elementu wyjściowego, należy ustawić jego atrybut wartości, a nie jego właściwość innerHTML. – Guffa

+0

Element wyjściowy działa jak element div. Jest tylko właścicielem treści, więc nie ma atrybutu wartości. http://www.w3schools.com/tags/html5_output.asp Ale nadal nie mogę uruchomić metody 'html()', nawet na 'div's ... – peirix

0

Ponadto, nie jest opakowaniem dojox.jq (w rozwoju, w najbliższych 1,4), który emuluje API obiektów JQuery powrotne

1

Jak wspomniano powyżej, sposób powraca zapytania liście węzłów obiektu, dzięki czemu iteracyjne to wynik jako tablicę lub użyć metod, które współpracują z dojo liście węzłów (np attr):

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

Ale jak tylko próbujesz kwerendy węzły przez ID, byłoby lepiej użyć dojo.byId() metoda , który zwraca domNode:

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

Albo bardziej dojo styl:

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

Jeśli chcesz zastąpić zawartość wszystkich oznaczone etykietami Wyjście z tej samej rzeczy, to kod powinien zawsze działa:

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

Dojo zapewnia także skrót do tego typu rzeczy. Można określić ciąg do funkcji foreach NodeList jest tak:

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

Słowo poz w łańcuchu jest wyjątkowy. (To jest trudny do debugowania, więc może nie być tego wart.)

1

Spróbuj dodając [0] takiego:

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

Dokumentacja wydaje się bałagan, to jest jedyna rzecz, którą dostać się do pracy z 1.7,

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