bulker
Query a DOM collection and perform bulk manipulations with its elements.
Bulker queries are live and backed by MutationObserver. This means that on any DOM change underlying bulker collections are changed accordingly (and all listeners are updated as well).
Installation
npm install bulker
Basic Example
Pass a selector to bulker
as you do with querySelector
.
import bulker from 'bulker';
const divs = bulker('#my .awesome > div');
divs
.set('textContent', 'whoa, I\'m a div!')
.call('addEventListener', 'click', event => console.log(event));
.get('textContent');
Advanced Example
<h2>todos</h2>
<ul class="todos">
<li class="todo">
<span>buy milk</span>
<button>done</button>
</li>
<li class="todo">
<span>catch a unicorn</span>
<button>done</button>
</li>
</ul>
<form>
<input type="text" name="title" placeholder="new todo">
<button type="submit">Submit</button>
</form>
import bulker from 'bulker';
function addTodo(title) {
const list = document.querySelector('.todos');
const todoElement = document.createElement('li');
const titleElement = document.createElement('span');
const doneButtonElement = document.createElement('button');
titleElement.textContent = title;
doneButtonElement.textContent = 'done';
todoElement.classList.add('todo');
todoElement.appendChild(titleElement);
todoElement.appendChild(doneButtonElement);
list.appendChild(todoElement);
}
function removeTodo(todo) {
todo.parentNode.removeChild(todo);
}
const todos = bulker('.todo');
todos.call('addEventListener', 'click', event => {
if (event.target.matches('button')) {
removeTodo(event.target.parentNode);
}
});
const form = bulker('form');
form.call('addEventListener', 'submit', event => {
event.preventDefault();
const formElement = event.target;
addTodo(formElement.title.value);
formElement.reset();
});
Methods
All methods are run on the html sample from Advanced Example section.
get
Gets a property of elements in bulk and returns them as an array.
bulker('.todo > span').get('textContent');
bulker('h2').get('textContent');
set
Sets a property for each element in bulk (if such property exists).
bulker('.todo > span').set('textContent', 'work hard');
call
Calls a DOM method for each element in bulk (if such method exists).
bulker('h2').call('insertAdjacentHTML', 'beforeend', '<div>a todo list</div>');
License
MIT