handle-node
v0.6.1
Published
Simple callback delegator based on DOM Node type
Readme
handle-node
Simple callback delegator based on DOM Node type.
Provides an alternative to switches, numeric constant-based delegation, and
DOM NodeIterators or TreeWalkers.
Installation
npm install handle-nodeNative ESM
import handleNode from 'handle-node';CommonJS
const handleNode = require('handle-node');Browser (any)
<script src="handle-node/dist/index-umd.js"></script>Browser (ESM - modern browsers only)
<script type="module">
import handleNode from './node_modules/handle-node/dist/index-esm.js';
</script>Usage
Supply a node followed by a handler object whose all optional properties
(human-readable Node type names) should be set to a callback which will
be passed the supplied Node and, always as the last argument, a reference
to the object on which the callbacks exist. The return value will be
undefined if a handler is missing, but otherwise will be the result of
invoking the callback which corresponds to the supplied node's type.
Here is a demonstration reimplementing textContent (if only element
and text types are known to be present):
const textContent = handleNode(node, { // This object is `textSerializer`
element ({childNodes}, textSerializer) {
return [...childNodes].reduce((str, node) => {
return str + handleNode(node, textSerializer);
}, '');
},
text: ({nodeValue}) => nodeValue
});Other arguments can also be passed in after the handler object, and these will also be supplied to the callbacks:
const textContent = handleNode(
node,
{ // This object is `textSerializer`
element ({childNodes}, arg1, arg2, textSerializer) {
return [...childNodes].reduce((str, node) => {
return str + handleNode(node, arg1, arg2, textSerializer);
}, '');
},
text: ({nodeValue}, arg1, arg2) => nodeValue
}, arg1, arg2
);API
The handler object can take the following optional properties:
elementattributetextcdataentityReferenceentityprocessingInstructioncommentdocumentdocumentTypedocumentFragmentnotation
