我有以下功能,它只是运行一个对象列表并返回正确的一个:
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
。
当我从函数返回值时,或者将该值赋给变量时,会发生错误。我在这里做错了什么?
答案 0 :(得分: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;
}
});
}
如果您return
调用jQuery.each
,您最终会得到一个包含您想要的每个this
的jQuery对象。
答案 1 :(得分: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;
}