虽然这不是库的重点,但 htmx 确实提供了一个小的辅助方法 API,主要用于 扩展开发 或与 事件 协作。
hyperscript 项目旨在为基于 htmx 的应用程序提供更广泛的脚本支持。
htmx.addClass()
此方法将类添加到给定元素。
elt
- 要添加类的元素class
- 要添加的类或
elt
- 要添加类的元素class
- 要添加的类delay
- 添加类之前的延迟(以毫秒为单位) // add the class 'myClass' to the element with the id 'demo'
htmx.addClass(htmx.find('#demo'), 'myClass');
// add the class 'myClass' to the element with the id 'demo' after 1 second
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
- 允许您从响应中选择要交换的内容 // issue a GET to /example and put the response HTML into #myDiv
htmx.ajax('GET', '/example', '#myDiv')
// issue a GET to /example and replace #myDiv with the response
htmx.ajax('GET', '/example', {target:'#myDiv', swap:'outerHTML'})
// execute some code after the content has been inserted into the DOM
htmx.ajax('GET', '/example', '#myDiv').then(() => {
// this code will be executed after the 'htmx:afterOnLoad' event,
// and before the 'htmx:xhr:loadend' event
console.log('Content inserted successfully!');
});
htmx.closest()
在给定元素的父级关系中查找最接近的匹配元素,包括该元素本身
elt
- 要从中查找选择器的元素selector
- 要查找的选择器 // find the closest enclosing div of the element with the id 'demo'
htmx.closest(htmx.find('#demo'), 'div');
htmx.config
一个属性,保存 htmx 在运行时使用的配置。
请注意,使用 元标记 是设置这些属性的首选机制。
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 不会处理具有此属性或父级的元素scrollBehavior:'instant'
- 字符串:使用 show 修饰符与 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 将在交换新内容时使用 视图转换 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 交换。 // update the history cache size to 30
htmx.config.historyCacheSize = 30;
htmx.createEventSource
用于创建新的 服务器发送事件 源的属性。这可以更新以提供自定义 SSE 设置。
func(url)
- 一个函数,它接受一个 URL 字符串并返回一个新的 EventSource
// override SSE event sources to not use credentials
htmx.createEventSource = function(url) {
return new EventSource(url, {withCredentials:false});
};
htmx.createWebSocket
用于创建新的 WebSocket 的属性。这可以更新以提供自定义 WebSocket 设置。
func(url)
- 一个函数,它接受一个 URL 字符串并返回一个新的 WebSocket
// override WebSocket to use a specific protocol
htmx.createWebSocket = function(url) {
return new WebSocket(url, ['wss']);
};
htmx.defineExtension()
定义一个新的 htmx 扩展。
name
- 扩展名称ext
- 扩展定义 // defines a silly extension that just logs the name of all events triggered
htmx.defineExtension("silly", {
onEvent : function(name, evt) {
console.log("Event " + name + " was triggered!")
}
});
htmx.find()
查找与选择器匹配的元素
selector
- 要匹配的选择器或
elt
- 要在其中查找匹配元素的根元素(包括在内)selector
- 要匹配的选择器 // find div with id my-div
var div = htmx.find("#my-div")
// find div with id another-div within that div
var anotherDiv = htmx.find(div, "#another-div")
htmx.findAll()
查找与选择器匹配的所有元素
selector
- 要匹配的选择器或
elt
- 要在其中查找匹配元素的根元素(包括在内)selector
- 要匹配的选择器 // find all divs
var allDivs = htmx.findAll("div")
// find all paragraphs within a given 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
- 要移除的监听器 // remove this click listener from the body
htmx.off("click", myEventListener);
// remove this click listener from the given div
htmx.off("#my-div", "click", myEventListener)
htmx.on()
向元素添加事件监听器
eventName
- 要添加监听器的事件名称listener
- 要添加的监听器options
- 一个 options 对象(或一个 useCapture 布尔值),以添加到事件监听器(可选)或
target
- 要添加监听器的元素eventName
- 要添加监听器的事件名称listener
- 要添加的监听器options
- 一个 options 对象(或一个 useCapture 布尔值),以添加到事件监听器(可选) // add a click listener to the body
var myEventListener = htmx.on("click", function(evt){ console.log(evt); });
// add a click listener to the given div
var myEventListener = htmx.on("#my-div", "click", function(evt){ console.log(evt); });
// add a click listener to the given div that should only be invoked once
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
- 定时字符串 // returns 3000
var milliseconds = htmx.parseInterval("3s");
// returns 3 - Caution
var milliseconds = htmx.parseInterval("3m");
htmx.process()
处理新内容,启用 htmx 行为。如果您有在正常 htmx 请求周期之外添加到 DOM 的内容,但仍然希望 htmx 属性起作用,这很有用。
elt
- 要处理的元素 document.body.innerHTML = "<div hx-get='/example'>Get it!</div>"
// process the newly added content
htmx.process(document.body);
htmx.remove()
从 DOM 中移除元素
elt
- 要移除的元素或
elt
- 要移除的元素delay
- 移除元素之前的延迟(以毫秒为单位) // removes my-div from the DOM
htmx.remove(htmx.find("#my-div"));
// removes my-div from the DOM after a delay of 2 seconds
htmx.remove(htmx.find("#my-div"), 2000);
htmx.removeClass()
从给定元素中移除类
elt
- 要从中移除类的元素class
- 要移除的类或
elt
- 要从中移除类的元素class
- 要移除的类delay
- 移除类之前的延迟(以毫秒为单位) // removes .myClass from my-div
htmx.removeClass(htmx.find("#my-div"), "myClass");
// removes .myClass from my-div after 6 seconds
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
)。留空以禁用头部处理scroll
, scrollTarget
, show
, showTarget
, focusScroll
- 指定交换后的滚动处理swapOptions
- 交换的额外 *可选* 参数select
- 要交换的内容的选择器(相当于 hx-select
)selectOOB
- 要在带外交换的内容的选择器(相当于 hx-select-oob
)eventInfo
- 要附加到 htmx:afterSwap
和 htmx:afterSettle
元素的对象anchor
- 触发滚动的锚元素,将在结算时滚动到视图中。提供对完整滚动处理的简单替代方法contextElement
- 用作交换操作上下文的 DOM 元素。当前用于查找为特定元素启用的扩展afterSwapCallback
, afterSettleCallback
- 分别在交换和结算后调用的回调函数。不带参数 // swap #output element inner HTML with div element with "Swapped!" text
htmx.swap("#output", "<div>Swapped!</div>", {swapStyle: 'innerHTML'});
htmx.takeClass()
从其兄弟节点中获取给定的类,这样,在其兄弟节点中,只有给定的元素将具有该类。
elt
- 将获取类的元素class
- 要获取的类 // takes the selected class from tab2's siblings
htmx.takeClass(htmx.find("#tab2"), "selected");
htmx.toggleClass()
在元素上切换给定的类
elt
- 要在其上切换类的元素class
- 要切换的类 // toggles the selected class on tab2
htmx.toggleClass(htmx.find("#tab2"), "selected");
htmx.trigger()
在元素上触发给定的事件
elt
- 要在其上触发事件的元素name
- 要触发的事件的名称detail
- 事件的详细信息 // triggers the myEvent event on #tab2 with the answer 42
htmx.trigger("#tab2", "myEvent", {answer:42});
htmx.values()
返回通过 htmx 值解析机制为给定元素解析的输入值
elt
- 要在其上解析值的元素request type
- 请求类型(例如 get
或 post
)。非 GET 的请求将包括元素的封闭表单。默认值为 post
// gets the values associated with this form
var values = htmx.values(htmx.find("#myForm"));