Open cssmagic opened 9 years ago
为什么到处都有 !
和 #
?
对于链接元素,可以用 href
属性来声明动作名。而此时 href
值通常是个 hash,需要把 #
过滤掉;滤 hash 就顺便滤一下 hashbang。由于链接的 href
值(动作名)可能不经修改就被复制到了别处,所以各处都会滤一下这些特殊字符。
简而言之,这是一个容错机制。这些过滤对日常开发几乎没有影响,应该不会有人特意用这些特殊字符来命名或区分动作名吧。
目前是这样设计的。如果觉得不妥,请开个 issue 详细讨论。谢谢。
术语约定
HTML 接口
页面中的 DOM 元素可以通过
data-action
属性来声明自己被点击时要执行的动作。比如点击下面的链接和按钮就可以分别触发名为foo
和bar
的动作(即执行对应的动作函数)。(值得一提的是,动作函数将以触发元素作为执行上下文。这跟事件的回调函数是类似的。)
对于链接元素,你还可以这样声明它的动作(似乎看起来更有语义,对用户也更友好一些):
注意事项
data-action
属性,其点击事件的默认行为就会被阻止。href
和data-action
属性的值,则只有后者会被视为动作名声明。href
属性来声明动作名,则href
属性值必须以#
开头。#
、!
和空白符都将被忽略,结尾的空白符也将被忽略,这意味着#foo
、#!foo
和## !! foo
都会被视为foo
。JavaScript 接口
action.define(actions)
定义一个或多个动作。
参数
actions
-- 纯对象。需要定义的动作。对象的键名为动作名,键值为动作函数。返回值
(无)
示例
以下代码将定义两个名为
foo
和bar
的动作。注意事项
#
、!
和空白符都将被忽略,结尾的空白符也将被忽略。action.add()
⚠️此方法系
action.define()
的别名。action.trigger(actionName, [context])
除了页面元素可以触发动作外,这个方法还允许你在 JS 代码中触发指定动作(甚至你还可以指定动作函数的执行上下文)。
这个方法可能并不常用,只是提供了另一种途径来调用你定义的动作。
参数
actionName
-- 字符串。动作名。context
-- 可选。对象。动作函数的执行上下文,默认为window
。返回值
undefined
。示例
如果你已经在上面定义了
foo
和bar
两个动作,那么以下代码将会触发名为foo
的动作。以下代码将会触发名为
bar
的动作,而且动作函数将以<body>
元素作为执行上下文(即函数内部的this
在此次执行时会指向document.body
)。注意事项
#
、!
和空白符都将被忽略,结尾的空白符也将被忽略。