Dojo - 如何在另一个forEach中的选定节点上使用forEach

时间:2012-01-03 17:24:08

标签: javascript dojo foreach

在jQuery中我会这样做:

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

//可以找到当前处理的表单中的所有必填字段。

但是因为我必须使用Dojo,我有点失落。在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 个答案:

答案 0 :(得分: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参数。

答案 1 :(得分:1)

请注意,您可以使用dijit.form.Form并为您的支票节省大量麻烦;) 也可以直接使用:而不是嵌套forEach:

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

甚至(但尚未测试)

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