bind-dom
Version:
Synchronization between two DOM elements (oneTime, oneWay, twoWay)
108 lines (80 loc) • 4 kB
Markdown
[](https://opensource.org/licenses/mit-license.php) [](https://badge.fury.io/js/bind-dom)
Change detection mechanisms based on [MutationObserver](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) interface.
It provides the ability to watch for changes being made to the DOM tree. You may connect node elements in One-Time, One-Way & Two-Way binding.

`npm install bind-dom`
`yarn add bind-dom`
```javascript
import { oneTime, oneWay, twoWay, disconnect, disconnectAll } from 'bind-dom'
```
```javascript
import bindDom from 'bind-dom'
```
```javascript
import bindDom from 'bind-dom'
bindDom.oneWay('oneWayObserver', document.querySelector('#targetNode'), document.querySelector('#toNode'))
bindDom.disconnect('oneWayObserver')
```
```javascript
import { twoWay, disconnect } from 'bind-dom'
twoWay('twoWayObserver', document.querySelector('#targetNode'), document.querySelector('#targetNode_2'))
disconnect('twoWayObserver')
```
> MutationObserver is watching changes being made to the DOM tree. So, for input/textarea elements make sure that attributes are changed. See the examples below.
```javascript
// JS
function changeValueAttr(event) {
event.target.setAttribute('value', event.target.value)
}
// HTML
<input type="text" onkeyup="changeValueAttr(event)" />
```
```javascript
// JS
function changeAttr(event) {
event.target.setAttribute('data-bind-dom', event.target.value.length)
}
// HTML
<textarea data-bind-dom="" onkeyup="changeAttr(event)"></textarea>
```
- **oneTime(observerName, targetNode, toNode, config)** - binding occurs one time when element content change
- **oneWay(observerName, targetNode, toNode, config)** - creates an ongoing connection between *targetNode* and *toNode*
- **twoWay(observerName, targetNode, toNode, config)** - creates a vice versa connection between *targetNode* and *toNode*
- **disconnect(observerName)** - disconnects observer
- **disconnectAll()** - disconnects all observers
{String} observerName - unique observer name<br>
{Element} targetNode - node element which is going to be observe for DOM changes<br>
{Element} toNode - node element to which changes is going to be applied (twoWay binding vice versa with targetNode)<br>
{Object} config - [specs](https://dom.spec.whatwg.org/#mutationobserver)
```javascript
const config = {
// what target objects to observe
// { attributes: true, childList: true, characterData: true } by default
members: {
attributes: true,
childList: true,
subtree: true,
characterData: true,
attributeOldValue: true,
characterDataOldValue: true
},
callback: (mutationsList) => {
// mutationsList[Array] - list of nodes which were changed
}
}
```
Any contributions you make **are greatly appreciated**.
Please read the [Contributions Guidelines](CONTRIBUTING.md) before adding your own helper or improvement to code snippets, explanations, etc.
MIT © [Vasyl Stokolosa](https://about.me/shystruk)