虽然这不是该库的重点,但htmx确实提供了一小部分辅助方法API,主要用于扩展开发或处理事件。
hyperscript项目旨在为基于htmx的应用程序提供更广泛的脚本支持。
htmx.addClass()
此方法将一个类添加到给定元素。
elt
- 要添加类的元素class
- 要添加的类或者
elt
- 要添加类的元素class
- 要添加的类delay
- 添加类前的延迟时间(以毫秒为单位) // 将类 'myClass' 添加到id为 'demo' 的元素
htmx.addClass(htmx.find('#demo'), 'myClass');
// 在1秒后将类 'myClass' 添加到id为 'demo' 的元素
htmx.addClass(htmx.find('#demo'), 'myClass', 1000);
htmx.ajax()
发出一个htmx风格的AJAX请求。此方法返回一个Promise,因此可以在内容插入到DOM后执行回调。
verb
- ‘GET’, ’POST’等path
- 要进行AJAX请求的URL路径element
- 目标元素(默认为body
)或者
verb
- ‘GET’, ’POST’等path
- 要进行AJAX请求的URL路径selector
- 目标选择器或者
verb
- ‘GET’, ’POST’等path
- 要进行AJAX请求的URL路径context
- 包含以下内容的上下文对象
source
- 请求的源元素,影响请求的hx-*
属性将根据该元素及其祖先解析event
- 触发请求的事件handler
- 处理响应HTML的回调target
- 用于交换响应的目标swap
- 响应相对于目标的交换方式values
- 随请求提交的值headers
- 随请求提交的标头select
- 允许选择要从响应中交换的内容 // 发出一个GET请求到 /example,并将响应HTML放入 #myDiv
htmx.ajax('GET', '/example', '#myDiv')
// 发出一个GET请求到 /example,并用响应替换 #myDiv
htmx.ajax('GET', '/example', {target:'#myDiv', swap:'outerHTML'})
// 在内容插入到DOM后执行一些代码
htmx.ajax('GET', '/example', '#myDiv').then(() => {
// 这段代码将在 'htmx:afterOnLoad' 事件后,
// 并在 'htmx:xhr:loadend' 事件前执行
console.log('内容插入成功!');
});
htmx.closest()
查找给定元素的父元素中最接近的匹配元素,包括该元素本身
elt
- 要从中查找选择器的元素selector
- 要查找的选择器 // 查找id为 'demo' 的元素的最近封闭的div
htmx.closest(htmx.find('#demo'), 'div');
htmx.config
一个属性,用于保存htmx在运行时使用的配置。
请注意,使用meta标签是设置这些属性的首选机制。
attributesToSettle:["class", "style", "width", "height"]
- 字符串数组:在定居阶段要稳定的属性refreshOnHistoryMiss:false
- 布尔值:如果设置为true
,htmx将在历史记录丢失时发出完整页面刷新,而不是使用AJAX请求defaultSettleDelay:20
- 整数:完成内容交换和定居属性之间的默认延迟defaultSwapDelay:0
- 整数:从服务器接收响应到进行交换之间的默认延迟defaultSwapStyle:'innerHTML'
- 字符串:如果省略hx-swap
,使用的默认交换样式historyCacheSize:10
- 整数:为历史支持在localStorage
中保留的页面数historyEnabled:true
- 布尔值:是否使用历史记录includeIndicatorStyles:true
- 布尔值:如果为true,htmx将在页面中注入少量CSS,使指示器在没有htmx-indicator
类时不可见indicatorClass:'htmx-indicator'
- 字符串:当请求进行中时,放置在指示器上的类requestClass:'htmx-request'
- 字符串:当请求进行中时,放置在触发元素上的类addedClass:'htmx-added'
- 字符串:暂时放置在htmx添加到DOM的元素上的类settlingClass:'htmx-settling'
- 字符串:当htmx处于定居阶段时,放置在目标元素上的类swappingClass:'htmx-swapping'
- 字符串:当htmx处于交换阶段时,放置在目标元素上的类allowEval:true
- 布尔值:允许在htmx中使用类似eval的功能,以启用hx-vars
、触发条件和脚本标签评估。可以设置为false
以兼容CSP。allowScriptTags:true
- 布尔值:允许在新内容中评估脚本标签inlineScriptNonce:''
- 字符串:nonce 添加到内联脚本inlineStyleNonce:''
- 字符串:nonce 添加到内联样式withCredentials:false
- 布尔值:允许使用凭据(如cookie、授权标头或TLS客户端证书)进行跨站点Access-Control请求timeout:0
- 整数:请求可以进行的毫秒数,超时后自动终止wsReconnectDelay:'full-jitter'
- 字符串/函数:getWebSocketReconnectDelay
的默认实现,用于在事件代码Abnormal Closure
、Service Restart
或Try Again Later
引发的意外连接丢失后重新连接wsBinaryType:'blob'
- 字符串:通过WebSocket连接接收的二进制数据类型disableSelector:"[hx-disable], [data-hx-disable]"
- 字符串数组:htmx将不会处理具有此属性的元素或其父元素scrollBehavior:'smooth'
- 字符串:页面过渡时加速链接的行为。允许的值为auto
和smooth
。Smooth将平滑滚动到页面顶部,而auto将表现为普通链接。defaultFocusScroll:false
- 布尔值:如果聚焦的元素应该滚动到视图中,可以使用focus-scroll交换修饰符覆盖getCacheBusterParam:false
- 布尔值:如果设置为true,htmx将在GET
请求中附加目标元素,格式为org.htmx.cache-buster=targetElementId
globalViewTransitions:false
- 布尔值:如果设置为true
,htmx将在交换新内容时使用View Transition API。methodsThatUseUrlParams:["get"]
- 字符串数组:htmx将使用这些方法,通过在URL中编码其参数来格式化请求,而不是请求体selfRequestsOnly:true
- 布尔值:是否只允许对与当前文档相同域的AJAX请求ignoreTitle:false
- 布尔值:如果设置为true
,htmx将在新内容中找到title
标签时不更新文档标题scrollIntoViewOnBoost:true
- 布尔值:是否将加速元素的目标滚动到视图中。如果加速元素上省略了hx-target
,目标默认为body
,导致页面滚动到顶部。triggerSpecsCache:null
- 对象:存储已评估触发器规格的缓存,提高解析性能,代价是更多内存使用。您可以定义一个简单的对象来使用永不清除的缓存,或者使用代理对象实现自己的系统。
// 将历史缓存大小更新为30
htmx.config.historyCacheSize = 30;
htmx.createEventSource
用于创建新的服务器发送事件源的属性。可以更新此属性以提供自定义SSE设置。
func(url)
- 一个函数,接受一个URL字符串并返回一个新的EventSource
// 覆盖SSE事件源以不使用凭据
htmx.createEventSource = function(url) {
return new EventSource(url, {withCredentials:false});
};
htmx.createWebSocket
用于创建新的WebSocket的属性。可以更新此属性以提供自定义WebSocket设置。
func(url)
- 一个函数,接受一个URL字符串并返回一个新的WebSocket
// 覆盖WebSocket以使用特定协议
htmx.createWebSocket = function(url) {
return new WebSocket(url, ['wss']);
};
htmx.defineExtension()
定义一个新的htmx扩展。
name
- 扩展名ext
- 扩展定义 // 定义一个简单的扩展,仅记录触发的所有事件名称
htmx.defineExtension("silly", {
onEvent : function(name, evt) {
console.log("Event " + name + " was triggered!")
}
});
htmx.find()
查找与选择器匹配的元素
selector
- 要匹配的选择器或者
elt
- 要在其中查找匹配元素的根元素,包括自身selector
- 要匹配的选择器 // 查找id为 my-div 的div
var div = htmx.find("#my-div")
// 在该div中查找id为 another-div 的div
var anotherDiv = htmx.find(div, "#another-div")
htmx.findAll()
查找与选择器匹配的所有元素
selector
- 要匹配的选择器或者
elt
- 要在其中查找匹配元素的根元素,包括自身selector
- 要匹配的选择器 // 查找所有div
var allDivs = htmx.findAll("div")
// 在给定的div中查找所有段落
var allParagraphsInMyDiv = htmx.findAll(htmx.find("#my-div"), "p")
htmx.logAll()
记录所有htmx事件,适用于调试。
htmx.logAll();
htmx.logNone()
不记录htmx事件,如果之前启用了调试,请调用此方法关闭记录器。
htmx.logNone();
htmx.logger
htmx用于记录的记录器
func(elt, eventName, detail)
- 一个函数,接受一个元素、事件名称和事件详细信息,并记录它 htmx.logger = function(elt, event, data) {
if(console) {
console.log("INFO:", event, elt, data);
}
}
htmx.off()
从元素中移除事件监听器
eventName
- 要移除监听器的事件名称listener
- 要移除的监听器或者
target
- 要从中移除监听器的元素eventName
- 要移除监听器的事件名称listener
- 要移除的监听器 // 从body中移除此点击监听器
htmx.off("click", myEventListener);
// 从给定div中移除此点击监听器
htmx.off("#my-div", "click", myEventListener)
htmx.on()
向元素添加事件监听器
eventName
- 要添加监听器的事件名称listener
- 要添加的监听器或者
target
- 要向其添加监听器的元素eventName
- 要添加监听器的事件名称listener
- 要添加的监听器 // 向body添加点击监听器
var myEventListener = htmx.on("click", function(evt){ console.log(evt); });
// 向给定div添加点击监听器
var myEventListener = htmx.on("#my-div", "click", function(evt){ console.log(evt); });
htmx.onLoad()
为htmx:load
事件添加回调。这可用于处理新内容,例如使用javascript库初始化内容
callback(elt)
- 对新加载的内容调用的回调 htmx.onLoad(function(elt){
MyLibrary.init(elt);
})
htmx.parseInterval()
解析与htmx方式一致的区间字符串。对于具有时间相关属性的插件非常有用。
注意:接受一个以s
或ms
结尾的整数。所有其他值都使用parseFloat
str
- 时间字符串 // 返回3000
var milliseconds = htmx.parseInterval("3s");
// 返回3 - 注意
var milliseconds = htmx.parseInterval("3m");
htmx.process()
处理新内容,启用htmx行为。如果有内容是通过正常htmx请求周期之外的方式添加到DOM中,但仍希望htmx属性生效,这非常有用。
elt
- 要处理的元素 document.body.innerHTML = "<div hx-get='/example'>Get it!</div>"
// 处理新添加的内容
htmx.process(document.body);
htmx.remove()
从DOM中移除一个元素
elt
- 要移除的元素或者
elt
- 要移除的元素delay
- 在移除元素前的延迟时间(以毫秒为单位) // 从DOM中移除my-div
htmx.remove(htmx.find("#my-div"));
// 在2秒后从DOM中移除my-div
htmx.remove(htmx.find("#my-div"), 2000);
htmx.removeClass()
从给定元素中移除一个类
elt
- 要从中移除类的元素class
- 要移除的类或者
elt
- 要从中移除类的元素class
- 要移除的类delay
- 移除类前的延迟时间(以毫秒为单位) // 从my-div中移除.myClass
htmx.removeClass(htmx.find("#my-div"), "myClass");
// 在6秒后从my-div中移除.myClass
htmx.removeClass(htmx.find("#my-div"), "myClass", 6000);
htmx.removeExtension()
从htmx中移除给定的扩展
name
- 要移除的扩展名 htmx.removeExtension("my-extension");
htmx.swap()
执行HTML内容的交换(和定居)
target
- 交换目标的HTML元素或字符串选择器content
- 要交换的内容的字符串表示swapSpec
- 交换规范,表示hx-swap
中的参数
swapStyle
(必需) - 交换样式(innerHTML
、outerHTML
、beforebegin
等)swapDelay
, settleDelay
(整数) - 分别在交换和定居前的延迟时间transition
(布尔值) -是否使用HTML过渡进行交换
ignoreTitle
(布尔值) - 禁用页面标题更新head
(字符串) - 指定head
标签处理策略(merge
或append
)。留空以禁用head处理scroll
, scrollTarget
, show
, showTarget
, focusScroll
- 指定交换后滚动处理swapOptions
- 交换的其他可选参数
select
- 要交换内容的选择器(相当于hx-select
)selectOOB
- 要带外交换内容的选择器(相当于hx-select-oob
)eventInfo
- 要附加到htmx:afterSwap
和htmx:afterSettle
元素的对象anchor
- 触发滚动的锚元素,将在定居时滚动到视图中。提供简单的替代完整滚动处理contextElement
- 作为交换操作上下文的DOM元素。目前用于查找为特定元素启用的扩展afterSwapCallback
, afterSettleCallback
- 分别在交换和定居后调用的回调函数。无参数 // 将#output元素的内部HTML与包含"Swapped!"文本的div元素交换
htmx.swap("#output", "<div>Swapped!</div>", {swapStyle: 'innerHTML'});
htmx.takeClass()
从其兄弟元素中获取给定的类,以便在其兄弟元素中,只有给定元素具有该类。
elt
- 将获取类的元素class
- 要获取的类 // 从tab2的兄弟元素中获取选中的类
htmx.takeClass(htmx.find("#tab2"), "selected");
htmx.toggleClass()
在元素上切换给定的类
elt
- 要在其上切换类的元素class
- 要切换的类 // 在tab2上切换选中的类
htmx.toggleClass(htmx.find("#tab2"), "selected");
htmx.trigger()
在元素上触发给定事件
elt
- 要在其上触发事件的元素name
- 要触发的事件名称detail
- 事件的详细信息 // 在#tab2上触发myEvent事件,答案为42
htmx.trigger("#tab2", "myEvent", {answer:42});
htmx.values()
返回通过htmx值解析机制为给定元素解析的输入值
elt
- 要解析值的元素request type
- 请求类型(例如get
或post
),非GET将包含元素的封闭表单。默认为post
// 获取与此表单相关的值
var values = htmx.values(htmx.find("#myForm"));