Jquery 从嵌套的每个函数返回一个值

Jquery 从嵌套的每个函数返回一个值,jquery,nested-function,Jquery,Nested Function,我正在尝试获取url的哈希值,并将其与列表中的href列表进行比较。下面是我代码的相关部分 //ON PAGE LOAD var hash = document.URL.substr(document.URL.indexOf('#')+1); hash = '#' + hash; if(hash) { $( "#tab ul li

我正在尝试获取url的哈希值,并将其与列表中的href列表进行比较。下面是我代码的相关部分

                //ON PAGE LOAD
                var hash = document.URL.substr(document.URL.indexOf('#')+1);
            hash = '#' + hash;
            if(hash)
            {
                $( "#tab ul li a" ).each(function( index ) {
                  if(hash==$(this).attr('href'))
                  {
                    alert(index);
                    return index;
                  }
                });
            }
            alert(index);
            //DO STUFF WITH INDEX
问题是嵌套函数没有返回索引值(它肯定是被设置的)。第一个警报返回一个数字,第二个警报返回未定义的数字


如何返回匹配值的索引?

您应该将其存储在循环之前定义的变量中,然后返回
false
以停止循环。(
每个
的返回值仅用于确定循环是否应提前停止)

例如:

var returned;
$( "#tab ul li a" ).each(function( index ) {
    if(hash==$(this).attr('href')) {
        returned = index;
        return false;
    }
});
// returned contains the value, or undefined

您应该将其存储在循环之前定义的变量中,然后返回
false
以停止循环。(
每个
的返回值仅用于确定循环是否应提前停止)

例如:

var returned;
$( "#tab ul li a" ).each(function( index ) {
    if(hash==$(this).attr('href')) {
        returned = index;
        return false;
    }
});
// returned contains the value, or undefined

你不能在你的<>代码>每个中间返回东西。最多可以返回
false
来中断循环。使用占位符变量存储所需的值,然后中断循环

            var returnValue;
            $( "#tab ul li a" ).each(function( index ) {
              if(hash==$(this).attr('href'))
              {
                alert(index);
                returnValue = index;
                return false; // breaks the each
              }
            });

当您执行
…each(function)(…
时,您正在创建一个函数,该函数将在
each
中调用。因此,如果您在其中返回某个内容,则返回值将在
each
代码中的某个位置读取,它将继续执行并返回其他内容(通常是另一个jQuery对象以允许链接性)实际上,“<代码> >每个实际上希望你返回某个东西,如果你想要的话,那就是“代码> false ”,这样它就停止了遍历节点列表。

< P>你不能在你的代码的中间返回东西> < < /代码>。最多你可以返回<代码> false <代码>来中断循环。你想要什么,然后打破循环

            var returnValue;
            $( "#tab ul li a" ).each(function( index ) {
              if(hash==$(this).attr('href'))
              {
                alert(index);
                returnValue = index;
                return false; // breaks the each
              }
            });

当您执行
…each(function)(…
时,您正在创建一个函数,该函数将在
each
中调用。因此,如果您在其中返回某个内容,则返回值将在
each
代码中的某个位置读取,它将继续执行并返回其他内容(通常是另一个jQuery对象以允许链接性).The
each
实际上希望您在需要时返回某些内容。例如,
false
,这样它就停止遍历节点列表。

您希望它返回到哪里?如果它从包含函数返回,它将跳过“使用索引执行任务”代码。这是jquery的
each()的一部分
工作。您希望它返回到哪里?如果它从包含函数返回,它将跳过“使用索引执行任务”代码。这是jquery的
each()
工作方式的一部分。