2012-01-03 20 views
3

內部在jQuery中,我會做:道場 - 如何選擇的節點上使用的forEach其他的forEach

var foo = jQuery("form"); 
foo.each(function(){ 
    this.find(".required").each(function(){...}) 
}) 

//它會發現在當前處理的形式每必填字段。

但是因爲我必須使用Dojo,所以我有點失落。在道場你需要使用dojo.forEach()

var foo = dojo.query("form"); 
dojo.forEach(foo, function(self,i){ 
//and now I have no idea on what to use the forEach. The "self" parameter is the form node. So now I would need something like self.forEach(... but that obviously does not work 
} 

回答

2

你只需要再做另一個查詢,就像你在第一級一樣。 Dojo的哲學是,事物通常不像jQuery那樣「神奇」。

var forms = dojo.query("form"); //No second argument; Searches whole document 
dojo.forEach(forms, function(form){ 
    var requireds = dojo.query(".required", form);//Only search under 
                // the current form. 
    dojo.forEach(requireds, function(required){ 
     /* do stuff*/ 
    }); 
}) 

我也冒昧地改變自變量的名稱(因爲不同的jQuery,Dojo的不改變this),除去從在foreach可選i參數。

+0

哦,我明白了,這裏的「魔術」在第二個查詢中,我們使用第二個參數,我假設它在哪裏看。非常感謝 – Krym 2012-01-03 17:55:08

+0

我所指的魔術是jquery返回一個包裝jquery對象的數組,而不是一組節點。但是,是的,這是訣竅。 – hugomg 2012-01-03 18:18:27

1

請注意,您也可以使用的dijit.form.Form,節省了很多的麻煩,爲您的檢查;) 也代替嵌套的foreach你可能會直接使用:

dojo.query("form *.required").forEach(function(requiredNode){}, this); 

甚至(但還沒有測試過)

dojo.query("form .required").forEach(function(requiredNode){}, this);