2009-10-09 103 views
6

我剛剛開始使用dojo,並且我已經理解dojo.query與jQuery中的$相同。dojo.query()返回什麼?

但我還沒有弄清楚它返回的結果。它是像jQuery中的專門對象嗎?

我想要做的(沒有運氣)是:

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

而且我目前使用的新html5 elements

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

我似乎無法找到dojo.query()返回的對象如何處理好的清單..

編輯:好吧,我認爲道場現在只是在搞我。我發現這個方法:addContent(),並在上述選擇器上工作。但我不想添加內容,我想替換內容...

回答

3

查詢方法返回一個NodeList對象。

在參考NodeList的參考文獻中,您可以找到可應用於元素列表 的功能列表。列表中沒有innerHTML函數,但是html函數應該可以工作。

HTML中沒有「輸出」元素,也許您嘗試使用類名稱「output」來定位元素?

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

或者id爲「output」的元素?

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

不,我使用HTML5元素'output',但只是爲了確保我已經嘗試給元素添加一個id,並且做同樣的...仍然沒有結果。 – peirix 2009-10-09 09:01:03

+0

@peirix:我明白了。要使用輸出元素,你應該設置它的值屬性,而不是它的innerHTML屬性。 – Guffa 2009-10-09 09:19:00

+0

輸出元素像div一樣工作。它只是一個內容持有者,所以它沒有價值屬性。 http://www.w3schools.com/tags/html5_output.asp但我仍然無法使'html()'方法工作,即使在'div's ... – peirix 2009-10-09 09:42:32

0

此外,還有一個dojox.jq包裝(在發展,在未來1.4),它模仿的JQuery返回對象的API

1

正如上面所說的,查詢方法返回NodeList對象,這樣你就可以遍歷這導致作爲陣列,或與節點列表(例如,attr)使用工作使用Dojo方法:

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

但只要你想查詢由ID節點,這將是更好地使用dojo.byId()方法,它返回domNode:

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

或者更道場風格:

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

如果你想同樣的事情,以取代所有輸出標籤的內容,那麼這段代碼應始終工作:

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

Dojo還爲這些事情提供了一個小捷徑。你可以像這樣指定字符串節點列表的功能的forEach:

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

項目字符串中是特別的。 (這是一個調試的痛苦,所以它可能不值得。)

1

通過增加[0]這樣試試這個:

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

的文件似乎是一個爛攤子,這是我得到1.7至工作的唯一的東西,

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