Javascript 在coffeescript:$(@)中迭代jQuery DOM元素。捷径
我的coffeescript中有很多循环,它们在DOM元素集合上迭代,并执行更多的jQuery。这些函数通常如下所示:Javascript 在coffeescript:$(@)中迭代jQuery DOM元素。捷径,javascript,coffeescript,shortcut,Javascript,Coffeescript,Shortcut,我的coffeescript中有很多循环,它们在DOM元素集合上迭代,并执行更多的jQuery。这些函数通常如下所示: $('.iterable.object').each -> $(@).doThis $(@).doThat ## More complicated usage $(@).jqueryPluginCall x: $(@).data('attr1') x: $(@).data('attr2') ##
$('.iterable.object').each ->
$(@).doThis
$(@).doThat
## More complicated usage
$(@).jqueryPluginCall
x: $(@).data('attr1')
x: $(@).data('attr2')
## More complicated usage
$(@).children('ul.animateable').each ->
if $(@).data('animation') is "fancy"
$(@).animate fancy: animation
else
$(@).animate simple: animation
$(@).focus(
->
$(@).animate some: more
, ->
$(@).animate even: more
) ## Or however you do double callbacks
我在输入$(@)时输入了大约3个错误。
一次又一次地输入,这已经成为一种痛苦
$(@)
没有快捷语法?打字有点麻烦,而且似乎是一种非常常见的语法。如果它的操作与自动函数调用类似,比如&doThis
而不是&doThis
,那就太酷了
编辑:
我希望能够在jQuery加载后,在javascript中定义一个别名,当调用
&
并链接到方法&doThis
,而不是像@bennedich建议的那样在每个循环的顶部。函数链接如何:
$('.iterable.object').each ->
$(@)
.doThis()
.doThat()
或将$(@)
存储到变量:
$('.iterable.object').each ->
t = $(@)
t.doThis()
t.doThat()
或者两者的结合。我能想到的最后一件事是IDE代码片段,例如,textmate将允许您将字母+选项卡配置为
$(@)
可能我只是年纪大了,但$(@)
已经相当简洁了……我有点挑剔。我有很多这样的人。(500+)不应该是$('.iterable.object')。each->…
?人们往往会忘记这一点,通常是$(“foo”)。each(function(){$(this.bar();})
与刚才的$(“foo”).bar()相同。这不是你的情况吗?我实际上在循环中执行更复杂的CS。这是一个示例,但我将更新以演示一层复杂性。就我个人而言,如果我要多次使用jquery对象,我总是通过将其放入变量来缓存它。提高性能和可读性+1我猜@
(this
)已经作为变量缓存在循环的作用域中,但重复将其处理到jQuery DOM元素($(@)(
)中不是吗?假设方法返回jQuery元素,则可以在一行中执行$('.iterable.object')->t=$(@).doThis().doThat()