CoffeeScript:切换" true"和"假"一个属性

时间:2014-08-06 13:30:03

标签: javascript jquery coffeescript boolean

我知道这应该很简单,但在搜索之后,我似乎无法找到答案。

我想在ariatrue之间切换false属性的值。我希望有一些简单的方法可以做到这一点,但我只想出以下内容:

  if @container.attr('aria-hidden') == 'true'
    @container.attr('aria-hidden', 'false')
  else
    @container.attr('aria-hidden', 'true')

我尝试否定了这些值,但没有成功(我猜在字符串布尔值和真正的布尔值之间存在问题,我的意思是false"false")。

我希望jQuery会提供这样的东西:

@container.toggleBool('aria-hidden')

4 个答案:

答案 0 :(得分:1)

没有toggleBoolean方法。你所能做的就是:

@container.attr 'aria-hidden', !/^true$/.test(@container.attr('aria-hidden'))

PS:我仍然认为您的代码段更具可读性,因此更受欢迎。

答案 1 :(得分:1)

从jQuery 1.1开始,.attr()接受一个函数作为第二个参数,其参数是集合中元素的索引位置,以及属性值。那么,就像那样(未经测试):

toggleBool = (index, attr) -> if attr='true' then 'false' else 'true'

[...]

 @container.attr('aria-hidden', toggleBool)

答案 2 :(得分:1)

如果你发现自己做了很多这样的事情,你可以创建一个简单的函数来翻转字符串' true value&#39 ;,假设字符串始终是' true'或者' false':

flip = (x)->{'true':'false', 'false':'true'}[x]
. . .
@container.attr 'aria-hidden', flip(@container.attr('aria-hidden'))

但如果它既不是,那么它将返回undefined,这可能是也可能不是你想要的:

coffee> flip('true')
'false'
coffee> flip('false')
'true'
coffee> flip('abcd')
undefined

答案 3 :(得分:0)

我提出了这个解决方案。至少它节省了一些按键。

handleEnterAndSpace: ->
  @container.attr('aria-hidden', !@isOpen())

isOpen: ->
  @container.attr('aria-hidden') == 'true'
相关问题