我有以下coffescript:
myElement = do (-> $('.manyElements').eq(window.elemIndex))
setElement = ->
[...]
myElement.addClass "class"
window.elemIndex ++
但是我得到了非常奇怪的结果。当我调试setElements()
并调用myElement
函数时,它返回一个空[]
。但是,当我将myElement
定义粘贴到控制台时,我得到一个返回的jquery对象。当我将此定义设置为变量时,为什么会得到[]
?
答案 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中的默认赋值等内容使其更加灵活。