Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript coffeescript jquery方法返回空_Javascript_Jquery_Coffeescript - Fatal编程技术网

Javascript coffeescript jquery方法返回空

Javascript coffeescript jquery方法返回空,javascript,jquery,coffeescript,Javascript,Jquery,Coffeescript,我有以下共同脚本: myElement = do (-> $('.manyElements').eq(window.elemIndex)) setElement = -> [...] myElement.addClass "class" window.elemIndex ++ 然而,我得到了非常奇怪的结果。当我调试到setElements()并调用myElement函数时,它返回一个空的[]。但是,当我将myElement定义复制粘贴到控制台中时,返回了一个jquery对象

我有以下共同脚本:

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

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

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

如果查看已编译的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')


只是一些想法,在CoffeeScript中使用默认赋值之类的东西使其更灵活。

为什么在这里使用CoffeeScript?特别是当简单的jQuery语句就可以了吗<代码>$('.manyElements').addClass('class')这不是完整的coffeescript文件。myElement将在CS的其他部分中使用,所以我想我提取出该部分并将其设置为一个更简单的变量。有许多
$('.manyElements')
这就是为什么我需要使用
window.elemIndex
来指定它们并对它们进行迭代。
var myElements=$('.myElements')
将它们缓存到一个可以反复使用的变量中。是的,但是我不仅仅是设置
var myElements=$('.myElements'))
我正在将其设置为函数调用,因此缓存应该是这里的一个问题?@user3358302这是不正确的(您没有为以后缓存该函数),将其包装在
do
中,它将在定义时执行。请看下面我的答案。非常感谢,是的,这就是问题所在!我放置
do
调用的原因是试图不将空的
()
用于
myElement().addClass('class')
。“但我认为这是不可避免的。”用户3358302在回答中添加了一些想法,可能会让你深思。
decorateElements = ($selector, klass='class')->
  $selector.eq(window.elemIndex).addClass(klass)


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