0

我有以下函数,它只是遍历对象列表并返回正确的对象:

function findLine(textElement,caretIndex){
    jQuery.each(textElement.lines(), function() {
        if(this.startIndex <= caretIndex && this.endIndex >= caretIndex) {
            alert(this);
            return this;
        }
   });
}

当我用这个调用它时,我得到undefined了回报。

line = findLine(textElement,caretIndex);
alert(line);

奇怪的是,当我line = findLine(textElement,caretIndex);在函数内运行警报并返回正确的结果时。this正确的值也是如此,但是当触发函数外的第二个警报时,我得到undefined.

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

4

2 回答 2

2

问题是您在return this该方法的回调中jQuery.each,并且您findLine没有返回任何内容。

function findLine(textElement,caretIndex){
    return jQuery.each(textElement.lines(), function() {
        if(this.startIndex <= caretIndex && this.endIndex >= caretIndex) {
            alert(this);
            return this;
        }
   });
}

如果你打电话returnjQuery.each你最终会得到一个 jQuery 对象,其中包含this你想要的每一个。

于 2013-04-26T04:08:03.293 回答
1

来自.each()的 jQuery 文档:

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

所以你的return this陈述本质上是一个continue陈述,因为this它是非假的。将您的功能更改为此可能有效(未经测试......并且可能有比 .each() 更好的功能,例如 .filter() 或 .grep()):

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;
}
于 2013-04-26T04:14:23.350 回答