我正在尝试获取网址的哈希并将其与列表中的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
问题是嵌套函数没有返回索引值(它肯定是设置的)。第一个警报返回一个数字 - 然而第二个警告返回未定义。
如何返回匹配值的索引?
答案 0 :(得分:2)
您无法在each
中间返回内容。最多可以返回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对象以允许可链接性)。 each
实际上希望您在需要时返回一些内容。这就是false
,以便它停止迭代节点列表。
答案 1 :(得分:1)
您应该将它存储在循环之前定义的变量中,然后返回false
以停止循环。 (each
的返回值仅用于确定循环是否应该提前停止)
示例:
var returned;
$( "#tab ul li a" ).each(function( index ) {
if(hash==$(this).attr('href')) {
returned = index;
return false;
}
});
// returned contains the value, or undefined