classlist
Version:
Element#classList for older browsers.
118 lines (75 loc) • 3.25 kB
Markdown
# ClassList
This module aims to match the behaviour of [`Element#classList`][classlist], without polyfilling it.
IE9 doesn't have the native `classList`, and other browsers have incomplete implementations. This module tries to bridge the gaps.
## Installation
`npm install classlist` (or `yarn add classlist`)
## Usage
This module is intended for use in the browser via a module bundler such as [Webpack][webpack] or [Browserify][browserify]. Sample usage:
```js
var classList = require('classlist')
var element = document.querySelector('#id')
var list = classList(element)
// Add a class:
list.add('foo')
// Remove a class:
list.remove('bar')
// Toggle a class:
list.toggle('baz')
// Replace class 'foo' with 'bar'
list.replace('foo', 'bar')
// Check if the element has a class:
if (list.contains('bar')) {
console.log('Element has class bar')
}
```
## API
This module tries to follow the [native API][classlist] as closely as possible.
- `list = new ClassList(element)`
Constructor. Create a new `ClassList` object. `new` is optional.
```js
// Object style, "new"
var ClassList = require('classlist')
var list = new ClassList(element)
// Function style, no "new"
var classList = require('classlist')
var list = classList(element)
```
- `list.item(index)` or `list[index]`
Returns the class at the given `index`. Example:
```js
var div = document.createElement('div')
div.className = 'a b'
var list = classList(div)
list.item(0) // 'a'
list[1] // 'b'
```
- `list.contains(class)`
Returns true if the element has the given class; false otherwise.
- `list.add(class1 [, class2 [, ... ]])`
Adds one or more classes to the element associated with `list`. If the class is already present on the element, it is not added again.
- `list.remove(class1 [, class2 [, ... ]])`
Removes one or more classes from the element, if present.
- `list.toggle(class [, force ])`
Toggles the given class; removes the class if it is present, or adds the class if it is not present.
When `force` is true, the class is always added (i.e. it is equivalent to calling `add`). When `force` is false, the class is always removed (i.e. it is equivalent to calling `remove`). This can be useful when conditioning on an outcome; for example,
```js
list.toggle('not_empty', counter > 0)
// is equivalent to:
if (counter > 0) {
list.add('not_empty')
} else {
list.remove('not_empty')
}
```
Returns `true` if the class is now present, or `false` otherwise.
- `list.replace(oldClass, newClass)`
If `oldClass` is present on the element, it is replaced by `newClass`. If `oldClass` is not present, this method has no effect.
Returns `true` if the class was replaced, `false` otherwise.
## Browser support
This module has been tested for compatibility with IE8+, and may work in even older browsers. If it doesn't, [open an issue](https://github.com/lucthev/classlist/issues/new).
## License
MIT
[classlist]: https://developer.mozilla.org/docs/Web/API/Element/classList
[browserify]: http://browserify.org/
[webpack]: https://webpack.github.io/
[npm]: https://www.npmjs.com/