coffeescript jquery方法返回空

时间:2014-06-23 18:09:07

标签: javascript jquery coffeescript

我有以下coffescript:

myElement = do (-> $('.manyElements').eq(window.elemIndex))

setElement = ->
 [...]
 myElement.addClass "class"
 window.elemIndex ++

但是我得到了非常奇怪的结果。当我调试setElements()并调用myElement函数时,它返回一个空[]。但是,当我将myElement定义粘贴到控制台时,我得到一个返回的jquery对象。当我将此定义设置为变量时,为什么会得到[]

1 个答案:

答案 0 :(得分:0)

如果查看已编译的javascript,您会看到您的jQuery选择器正在立即执行,因为您将它包装在do语句中:

var myElement;

myElement = (function() {
  return $('.manyElements').eq(window.elemIndex);
})();

相反,我认为你只想做一个函数声明:

myElement = -> $('.manyElements').eq(window.elemIndex)

然后调用它

myElement().addClass('class')

编辑:

如果你想避免空洞的求助电话(回复你的评论)你可以用不同的方式做到这一点:

addClassToMyElement = (klass)->   
  $('.manyElements').eq(window.elemIndex).addClass(klass)

addClassToMyElement('class')

decorateElements = ($selector, klass='class')->
  $selector.eq(window.elemIndex).addClass(klass)


decorateElements $('.manyElements')
decorateElements $('.manyElements'), 'foo'

只是一些想法,使用CoffeeScript中的默认赋值等内容使其更加灵活。