Javascript函数";把这个退回来;不起作用

Javascript函数";把这个退回来;不起作用,javascript,jquery,Javascript,Jquery,我有以下函数,它只运行一个对象列表并返回正确的对象: function findLine(textElement,caretIndex){ jQuery.each(textElement.lines(), function() { if(this.startIndex <= caretIndex && this.endIndex >= caretIndex) { alert(this); retu

我有以下函数,它只运行一个对象列表并返回正确的对象:

function findLine(textElement,caretIndex){
    jQuery.each(textElement.lines(), function() {
        if(this.startIndex <= caretIndex && this.endIndex >= caretIndex) {
            alert(this);
            return this;
        }
   });
}
奇怪的是,当我运行
line=findLine(textElement,caretIndex)触发函数中的警报并返回正确的结果。因此
是正确的值,但是当触发函数外部的第二个警报时,我得到
未定义的


当我从函数返回值时,可能发生了一些错误,或者与将该值赋给变量有关。我在这里做错了什么?

问题是您在
返回此
jQuery的回调中。每个
方法,而您的
查找行
都不会返回任何内容

function findLine(textElement,caretIndex){
    return jQuery.each(textElement.lines(), function() {
        if(this.startIndex <= caretIndex && this.endIndex >= caretIndex) {
            alert(this);
            return this;
        }
   });
}
函数findLine(textElement,caretIndex){
返回jQuery.each(textElement.lines(),function()){
if(this.startIndex=caretIndex){
警惕(这个);
归还这个;
}
});
}

如果您
返回
jQuery。每次调用
都会得到一个jQuery对象,其中包含您想要的每个
这个

问题是,您要
返回这个
是在
jQuery的回调中。每个
方法,而您的
findLine
都不会返回任何内容

function findLine(textElement,caretIndex){
    return jQuery.each(textElement.lines(), function() {
        if(this.startIndex <= caretIndex && this.endIndex >= caretIndex) {
            alert(this);
            return this;
        }
   });
}
函数findLine(textElement,caretIndex){
返回jQuery.each(textElement.lines(),function()){
if(this.startIndex=caretIndex){
警惕(这个);
归还这个;
}
});
}

如果
返回
jQuery。每次调用
都会得到一个jQuery对象,其中包含您想要的每个
这个

来自jQuery文档:

通过使回调函数返回false,我们可以在特定迭代中中断$.each()循环。返回非false与for循环中的continue语句相同;它将立即跳到下一个迭代

因此,您的
返回这个
语句本质上是一个
继续
语句,因为
这个
是非false的。将您的函数更改为此可能会起作用(未经测试…可能有比.each()更好的函数可供使用,例如.filter()或.grep()):

函数findLine(textElement,caretIndex){
var结果;
每个(textElement.lines(),function()){
if(this.startIndex=caretIndex){
警惕(这个);
结果=这个;
return false;//在回调中返回false只会导致循环退出
}
});
返回结果;
}

来自jQuery文档中关于:

通过使回调函数返回false,我们可以在特定迭代中中断$.each()循环。返回非false与for循环中的continue语句相同;它将立即跳到下一个迭代

因此,您的
返回这个
语句本质上是一个
继续
语句,因为
这个
是非false的。将您的函数更改为此可能会起作用(未经测试…可能有比.each()更好的函数可供使用,例如.filter()或.grep()):

函数findLine(textElement,caretIndex){
var结果;
每个(textElement.lines(),function()){
if(this.startIndex=caretIndex){
警惕(这个);
结果=这个;
return false;//在回调中返回false只会导致循环退出
}
});
返回结果;
}

您只是从函数间返回,而不是从主函数返回。这不是
每个
所做的。我想你在想
map
grep
。您没有从
findLine
返回任何内容。您只是从函数间返回,而不是从主函数返回。这不是
每个
所做的。我想你在想
map
grep
。而且您没有从
findLine
返回任何内容。还值得注意的是,如果您试图减少数组中的项目,您可能真的想要一个调用。还值得注意的是,如果您试图减少数组中的项目,您可能真的想要一个调用
function findLine(textElement,caretIndex){
    var result;
    jQuery.each(textElement.lines(), function() {
        if(this.startIndex <= caretIndex && this.endIndex >= caretIndex) {
            alert(this);
            result = this;
            return false; // returning false in the callback just causes the loop to exit
        }
   });

   return result;
}