DomProxy
Kind of a NodeList with all the APIs of HTMLElements - and more...
Install / Use
/learn @nuxodin/DomProxyREADME
domProxy
lightweight under 1KB (gzip) at the moment!
I ask you to test and participate
What jQuery would look like if it was released in 2021
Some things i still miss from jQuery, like assigning multiple events to multiple elements in one go.
elements.addEventListener('click focus', listener)
Using js-proxies, its now possible to do this with very little code.
The goal of this project is to integrate only the really useful apis.
Ussage
import domProxy from './domProxy.js';
// children is also a domProxy
domProxy('.el').children.hidden = true;
// chaining
domProxy('.el').setAttribute('data-b','x').setAttribute('data-b', 'y');
// traversal methods: second argument means including the element itself
domProxy('.el').nextAll('.deletable', true).remove();
How it works
All nodes are wrapped with a proxy.
When accessing a property of the nodeList, the lib first checks if there is an own property, if not, the correct property of the elements is used.
If a method returns undefined on elements, the domProxy will be returned to allow chaining. (addEventListener, setAttribute, ...)
API
// constructor:
domProxy(element) // or:
domProxy([element, element, ...]) // also nodeList, htmlCollection, Set... or:
domProxy('<div>html-elements</div><h1>test</h1>') // or:
domProxy('.selector')
nodeList.next(selector?, includingSelf?)
// returns next sibling that matches
nodeList.nextAll(selector?, includingSelf?)
// returns all next siblings that matches
nodeList.prev(selector?, includingSelf?)
// returns previous sibling that matches
nodeList.prevAll(selector?, includingSelf?)
// returns all previous matching siblings
nodeList.parent(selector?, includingSelf?)
// returns next parent that matches
nodeList.parentAll(selector?, includingSelf?)
// returns all parents matching
nodeList.ensureId()
// returns the id of the Element, if it has none, it generates one
nodeList.on(types, listener, options)
// add event listeners for multiple types (eg.'click mouseover')
nodeList.off(types, listener, options)
// remove event listeners for multiple types (eg.'click mouseover')
nodeList.trigger(type, init)
// like dispatchEvent(new CustomEvent(type, init)) but defaults to bubbles:true
nodeList.css(name, value?)
// get or set (value) styles
// ...and every api available on the Elements itself
nodeList.getAttribute
nodeList.setAttribute
nodeList.hasAttribute
nodeList.closest
nodeList.matches
nodeList.insertAdjacentElement
nodeList.insertAdjacentText
nodeList.getBoundingClientRect
nodeList.querySelector
nodeList.querySelectorAll
nodeList.before
nodeList.after
nodeList.replaceWith
nodeList.remove
nodeList.prepend
nodeList.append
nodeList.innerHTML
nodeList.children
nodeList.cloneNode
nodeList.addEventListener
...
...
Take part
I am very happy about every participation, even if it is only spelling corrections.
And leave a star if you like it!
Similar projects
https://gist.github.com/AdaRoseCannon/d95a7cbb8edd730443c62f0daff875ac
https://github.com/WebReflection/handy-wrap
Related Skills
node-connect
351.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
110.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
351.2kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
351.2kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
