Jquery中的.each()函数返回值时如何工作?

3
使用.each()函数进行循环时,我们可以使用return false来跳出循环。例如:
$( "div" ).each(function( index, element ) {
     alert('Bye...!');
     return false;
});

但是,当返回任何字符串值时它会如何工作?

var myDiv = $( "div" ).each(function( index, element ) {
     return "xyz";
});

你不能简单地从每个循环中返回...将全局元素放在顶部,然后在每个循环中设置值。 - Vishal Sharma
2
你想要做什么? - Arun P Johny
可能是Jquery each-停止循环并返回对象的重复问题。 - JJJ
@Juhana:OP 正在询问它将如何工作,而不是“如何打破 .each() 并返回”。 - Tomas Ramirez Sarduy
@Arun 我想从所有div中筛选出几个div。我给出了这个例子以理解如何在each()中返回任何常数的工作原理? - Mani AC
显示剩余3条评论
5个回答

2

简短回答:

return$.each 中不会像这样起作用。它只会退出 foreach 循环。

var myDiv = $( "div" ).each(function( index, element ) {
     return "xyz";
});
console.log(myDiv);

这将输出undefined。让我们尝试不同的方法并比较输出结果:

长答案

我认为在Jquery文档中没有很清晰地表达,他们只是说:"您可以通过返回false来在回调函数内停止循环。"那么返回变量或返回true呢?让我们来比较不同的函数:

var stores = ["C", "B", "A"];

function HasC() {
    $(stores).each(function (i, s){
        if(s=="C")
            //yes, we have a C, so let's return true
            return true;
    });
}

function HasB() {
    var b = false;
    $(stores).each(function (i, s){
        if(s=="B"){
            b=true;
            return b;
        }
    });
}

function HasA() {
    var a = false;
    $(stores).each(function (i, s){
        if(s=="A"){
            a = true;
            return false;
        }
    });
    return a;
}
  • HasC()在迭代所有元素后将返回undefined,但不会中断迭代。
  • HasB也将返回undefined,因为变量b的上下文仅在each函数内部。
  • HasA()将返回true并按预期工作,因为一旦找到"A",我们使用return false停止循环,然后在循环之后仍然有var a存在。

Fiddle: http://jsfiddle.net/aXkcW/19/


1
您可能需要使用map()
var myDiv = $( "div" ).map(function( index, element ) {
     return "xyz";
});

返回结果:

返回常量"XYZ"对我来说没有多大意义,你可能需要返回其他内容。

$.map()方法将函数应用于数组或对象中的每个项,并将结果映射到一个新数组中。在jQuery 1.6之前,$.map()仅支持遍历数组。从jQuery 1.6开始,它也遍历对象,参考


0
使用foreach遍历一组元素并对它们进行一些操作或从它们中获取信息,但我认为没有返回任何内容的必要,因为返回值会中断foreach循环。
        $("div").each(function () {
            // update all divs text
            $(this).html = "new text";
        });

0

你可以使用一个标志...

请参见FIDDLE

 var flag = false;
 $( "div" ).each(function( index, element ) {     
     if(!flag){
         flag=true;
         alert(index);
         return "xyz";
     }
 });

0
在.each()循环中返回任何常量意味着返回true。
另外,
 var myDiv = $( "div" ).each(function( index, element ) {
                  return "xyz";
             });

上述代码等同于

 var myDiv = $( "div" );

检查一下Fiddle


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接