diff options
Diffstat (limited to 'alpinejs/packages/alpinejs/src/utils/walk.js')
-rw-r--r-- | alpinejs/packages/alpinejs/src/utils/walk.js | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/alpinejs/packages/alpinejs/src/utils/walk.js b/alpinejs/packages/alpinejs/src/utils/walk.js new file mode 100644 index 0000000..909df1a --- /dev/null +++ b/alpinejs/packages/alpinejs/src/utils/walk.js @@ -0,0 +1,38 @@ +export function walk(el, callback) { + if (typeof ShadowRoot === 'function' && el instanceof ShadowRoot) { + Array.from(el.children).forEach(el => walk(el, callback)) + + return + } + + let skip = false + + callback(el, () => skip = true) + + if (skip) return + + let node = el.firstElementChild + + while (node) { + walk(node, callback, false) + + node = node.nextElementSibling + } +} +// export function walk(el, callback) { +// if (el instanceof ShadowRoot || el instanceof DocumentFragment) { +// Array.from(el.children).forEach(el => walk(el, callback)) + +// return +// } + +// callback(el, () => { +// let node = el.firstElementChild + +// while (node) { +// walk(node, callback) + +// node = node.nextElementSibling +// } +// }) +// } |