0.2.2 • Published 12 months ago

@ryanmorr/attr v0.2.2

Weekly downloads
1
License
Unlicense
Repository
github
Last release
12 months ago

attr

Version Badge License Build Status

The ultimate DOM attribute, property, style, data, and event setter

Install

Download the CJS, ESM, UMD versions or install via NPM:

npm install @ryanmorr/attr

Usage

Import the library:

import attr from '@ryanmorr/attr';

Add an attribute:

attr(element, 'id', 'foo');

Add multiple attributes:

attr(element, {
    id: 'foo',
    class: 'bar baz qux'
});

Remove an attribute with null or undefined:

attr(element, 'class', null);

Set boolean attributes and properties:

attr(checkbox, 'checked', true);
attr(textfield, 'value', 'foo bar');
attr(element, 'innerHTML', '<span></span>');

Set styles as a string:

attr(element, 'style', 'width: 100px; height: 100px;');

Set styles as an object:

attr(element, 'style', {
    width: 100,
    height: 100
});

Set CSS custom properties:

attr(element, 'style', 'color: var(--color)');

attr(element, 'style', '--color: red');
attr(element, 'style', {'--color': 'blue'});

Add an event listener:

attr(element, 'onclick', (e) => {
    // Handle click event
});

Set data attributes (will automatically convert objects to string):

attr(element, 'data', {
    str: 'foo',
    num: 123,
    bool: true,
    object: {foo: 'bar'},
    array: [1, 2, 3]
});

Supports functions that return the new value (except when adding an event!). The element and the current value of the attribute are provided as the only 2 parameters:

attr(element, 'class', 'foo bar baz');
element.className; //=> "foo bar baz"
attr(element, 'class', (el, value) => value.split(' ').filter(cls => cls !== 'bar'));
element.className; //=> "foo baz"

attr(element, 'style', {width: 100, height: 100});
element.style.cssText; //=> "width: 100px; height: 100px"
attr(element, 'style', (el, value) => Object.assign({}, value, {height: null}));
element.style.cssText; //=> "width: 100px;"

attr(element, 'data', {foo: [1, 2, 3]});
element.dataset.foo; //=> "[1,2,3]"
attr(element, 'data', (el, value) => ({foo: value.foo.filter(val => val !== 2)}));
element.dataset.foo; //=> "[1,3]"

License

This project is dedicated to the public domain as described by the Unlicense.

0.2.2

12 months ago

0.2.1

3 years ago

0.2.0

3 years ago

0.1.0

6 years ago