虽然这不是库的主要关注点,但htmx提供了一个小型辅助方法API,主要用于扩展开发或处理事件。
hyperscript项目旨在为基于htmx的应用程序提供更广泛的脚本支持。
htmx.addClass()此方法向给定元素添加一个类。
elt - 要添加类的元素class - 要添加的类名或
elt - 要添加类的元素class - 要添加的类名delay - 添加类前的延迟时间(毫秒) // 向id为'demo'的元素添加'myClass'类
htmx.addClass(htmx.find('#demo'), 'myClass');
// 1秒后向id为'demo'的元素添加'myClass'类
htmx.addClass(htmx.find('#demo'), 'myClass', 1000);
htmx.ajax()发起htmx风格的AJAX请求。此方法返回一个Promise,因此可以在内容插入DOM后执行回调。
verb - HTTP方法如'GET'、'POST'等path - 发起AJAX请求的URL路径element - 目标元素(默认为body)或
verb - HTTP方法如'GET'、'POST'等path - 发起AJAX请求的URL路径selector - 目标元素的选择器或
verb - HTTP方法如'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以兼容CSPallowScriptTags:true - 布尔值:允许评估新内容中的脚本标签inlineScriptNonce:'' - 字符串:添加到内联脚本的随机数inlineStyleNonce:'' - 字符串:添加到内联样式的随机数withCredentials:false - 布尔值:允许使用cookie、授权头或TLS客户端证书进行跨域Access-Control请求timeout:0 - 整型:请求自动终止前允许的毫秒数wsReconnectDelay:'full-jitter' - 字符串/函数:在事件代码Abnormal Closure、Service Restart或Try Again Later导致意外连接丢失后重新连接的getWebSocketReconnectDelay的默认实现wsBinaryType:'blob' - 字符串:通过WebSocket连接接收的二进制数据类型disableSelector:"[hx-disable], [data-hx-disable]" - 字符串数组:htmx不会处理带有此属性或其父元素带有此属性的元素disableInheritance:false - 布尔值:如果设为true,将完全禁用属性继承,您可以使用hx-inherit属性显式指定继承scrollBehavior:'instant' - 字符串:使用显示修饰符与hx-swap时的滚动行为。允许值为instant(滚动应立即单次跳转完成)、smooth(滚动应平滑动画)和auto(滚动行为由scroll-behavior的计算值确定)defaultFocusScroll:false - 布尔值:是否将聚焦元素滚动到视图中,可使用focus-scroll交换修饰符覆盖getCacheBusterParam:false - 布尔值:如果设为true,htmx会将目标元素以org.htmx.cache-buster=targetElementId格式附加到GET请求globalViewTransitions:false - 布尔值:如果设为true,htmx在交换新内容时将使用视图过渡APImethodsThatUseUrlParams:["get", "delete"] - 字符串数组:htmx将通过URL而非请求体对这些方法的参数进行编码selfRequestsOnly:true - 布尔值:是否仅允许向当前文档同域的AJAX请求ignoreTitle:false - 布尔值:如果设为true,当在新内容中找到title标签时htmx不会更新文档标题scrollIntoViewOnBoost:true - 布尔值:是否将被提升元素的目标滚动到视口中。如果被提升元素上省略了hx-target,目标默认为body,导致页面滚动到顶部triggerSpecsCache:null - 对象:存储已评估触发条件的缓存,以提高解析性能但增加内存使用。您可以定义一个简单对象来使用永不清除的缓存,或使用代理对象实现自己的系统htmx.config.responseHandling:[...] - HtmxResponseHandlingConfig[]:可以在此配置响应状态码的默认响应处理行为(交换或错误)htmx.config.allowNestedOobSwaps:true - 布尔值:是否处理嵌套在主响应元素内的元素的OOB交换。参见嵌套OOB交换htmx.config.historyRestoreAsHxRequest:true - 是否通过返回此响应头将历史缓存未命中的完整页面重新加载请求视为"HX-Request"。当使用HX-Request头选择性地返回部分响应时,应始终禁用此功能 // 将历史缓存大小更新为30
htmx.config.historyCacheSize = 30;
htmx.createEventSource用于创建新服务器发送事件(SSE)源的属性。可更新以提供自定义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("事件 " + name + " 已触发!")
}
});
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.loggerhtmx用于记录的记录器
func(elt, eventName, detail) - 接收元素、事件名称和事件详情并进行记录的函数 htmx.logger = function(elt, event, data) {
if(console) {
console.log("信息:", 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 - 要添加的监听器options - 添加到事件监听器的选项对象(或useCapture布尔值)(可选)或
target - 要添加监听器的元素eventName - 要添加监听器的事件名称listener - 要添加的监听器options - 添加到事件监听器的选项对象(或useCapture布尔值)(可选) // 向body添加点击监听器
var myEventListener = htmx.on("click", function(evt){ console.log(evt); });
// 向给定div添加点击监听器
var myEventListener = htmx.on("#my-div", "click", function(evt){ console.log(evt); });
// 向给定div添加仅调用一次的点击监听器
var myEventListener = htmx.on("#my-div", "click", function(evt){ console.log(evt); }, { once: true });
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'>获取!</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与包含"已交换!"文本的div元素交换
htmx.swap("#output", "<div>已交换!</div>", {swapStyle: 'innerHTML'});
htmx.takeClass()从其兄弟元素中获取给定类,使得在其兄弟元素中只有给定元素拥有该类。
elt - 将获取类的元素class - 要获取的类名 // 从tab2的兄弟元素中获取selected类
htmx.takeClass(htmx.find("#tab2"), "selected");
htmx.toggleClass()切换元素上的给定类
elt - 要切换类的元素class - 要切换的类名 // 切换tab2上的selected类
htmx.toggleClass(htmx.find("#tab2"), "selected");
htmx.trigger()在元素上触发给定事件
elt - 要触发事件的元素name - 要触发的事件名称detail - 事件的详细信息 // 在#tab2上触发带有答案42的myEvent事件
htmx.trigger("#tab2", "myEvent", {answer:42});
htmx.values()返回通过htmx值解析机制为给定元素解析的输入值
elt - 要解析值的元素request type - 请求类型(如get或post)。非GET请求将包含元素的封闭表单。默认为post // 获取与此表单关联的值
var values = htmx.values(htmx.find("#myForm"));