webcoreui
Version:
UI component and template library for Astro, Svelte, and React apps styled with Sass.
54 lines (41 loc) • 1.35 kB
text/typescript
export const get = <T extends Element = Element>(selector: string, all?: boolean): T | NodeListOf<T> | null => all
? document?.querySelectorAll<T>(selector)
: document?.querySelector<T>(selector)
export const on = (
selector: string | HTMLElement | Document,
event: string,
callback: any,
all?: boolean
) => {
if (all && typeof selector === 'string') {
const elements = document.querySelectorAll(selector)
elements?.forEach(element => {
element.addEventListener(event, callback)
})
return
}
if (typeof selector === 'string') {
(get(selector) as HTMLElement)?.addEventListener(event, callback)
return
}
selector?.addEventListener(event, callback)
}
export const off = (
selector: string | HTMLElement | Document,
event: string,
fn: any,
all?: boolean
) => {
if (all && typeof selector === 'string') {
const elements = document.querySelectorAll(selector)
elements?.forEach(element => {
element.removeEventListener(event, fn)
})
return
}
if (typeof selector === 'string') {
(get(selector) as HTMLElement)?.removeEventListener(event, fn)
return
}
selector?.removeEventListener(event, fn)
}