我知道这应该很简单,但在搜索之后,我似乎无法找到答案。
我想在aria
和true
之间切换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')
答案 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'