虽然这不是该库的重点,但 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 - 允许从响应中选择要交换的内容 // 向 /example 发出 GET 请求,并将响应 HTML 放入 #myDiv
htmx.ajax('GET', '/example', '#myDiv')
// 向 /example 发出 GET 请求,并用响应替换 #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:'' - 字符串:添加到内联脚本的 nonceinlineStyleNonce:'' - 字符串:添加到内联样式的 noncewithCredentials: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 将不处理具有此属性或父级上的元素的元素disableInheritance:false - 布尔值:如果设置为 true,则完全禁用属性的继承,并可以使用 hx-inherit 属性显式指定继承。scrollBehavior:'instant' - 字符串:使用 hx-swap 的 show 修饰符时的滚动行为。允许的值为 instant(滚动应立即在单次跳跃中发生)、smooth(滚动应平滑动画)和 auto(滚动行为由 scroll-behavior 的计算值决定)。defaultFocusScroll:false - 布尔值:焦点元素是否应滚动到视图中,可以使用 focus-scroll 交换修饰符覆盖getCacheBusterParam:false - 布尔值:如果设置为 true,htmx 将以格式 org.htmx.cache-buster=targetElementId 将目标元素附加到 GET 请求globalViewTransitions:false - 布尔值:如果设置为 true,htmx 将在交换新内容时使用 View Transition API。methodsThatUseUrlParams:["get", "delete"] - 字符串数组:htmx 将通过在 URL 中编码这些方法的参数(而非请求体)来格式化请求selfRequestsOnly:true - 布尔值:是否仅允许与当前文档相同域的 AJAX 请求ignoreTitle:false - 布尔值:如果设置为 true,htmx 在新内容中找到 title 标签时不会更新文档标题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 标头可选返回部分响应时,应始终禁用此选项htmx.config.reportValidityOfForms:false - 是否向最终用户报告输入验证错误并将焦点更新到第一个验证失败的输入。这应始终启用,因为这符合默认浏览器表单提交行为 // 将历史缓存大小更新为 30
htmx.config.historyCacheSize = 30;
htmx.createEventSource一个用于创建新的 Server Sent Event 源的属性。此属性可以更新以提供自定义 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.loggerhtmx 用于记录的日志记录器
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 - 要添加的监听器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'>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 - 分别在交换和结算后调用的回调函数。不接受参数 // 用带有 "Swapped!" 文本的 div 元素交换 #output 元素的内部 HTML
htmx.swap("#output", "<div>Swapped!</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 上触发 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"));