The super simple shim for classList
of HTML and SVG, that transparently intercepts difference between modern browsers and semi-modern browsers.
There are many shims and polyfills for classList
, and also, almost modern browsers already support classList
.
Why is a new shim needed now?
- Some browsers don't support yet
classList
of SVG element even if those support that of HTML element. - Some browsers don't support multiple arguments for methods of
DOMTokenList
(i.e.classList
). - Since modern browsers support many other APIs, a heavy library that supports legacy browsers perfectly is unneeded.
- That is, only a little bit of intercepting is needed, more simple and small shim is needed.
So, features of mClassList are:
- Provide
classList
if specified element does not have it. - Support SVG element also.
- Support and respect the standard API specification that contains supporting multiple arguments for methods.
- Simpler and smaller by using other APIs that are supported by modern browsers.
- Don't change any
prototype
. (Polyfills and the evolution of the Web) - Additionally support, "Method chaining".
Load mClassList into your web page.
<script src="m-class-list.min.js"></script>
Replace element.classList
with mClassList(element)
.
The element
can be a HTML element or SVG element.
For example, replace this code:
if (element.classList.contains('foo')) {
element.classList.add('bar', 'baz');
}
with:
if (mClassList(element).contains('foo')) {
mClassList(element).add('bar', 'baz');
}
Following methods and properties are supported. For details of each one, see HTML5 document such as MDN.
number = mClassList(element).length
token = mClassList(element).item(index)
classList = mClassList(element).add(token1[, token2, token3...])
(See mClassList.methodChain
for the return value.)
classList = mClassList(element).remove(token1[, token2, token3...])
(See mClassList.methodChain
for the return value.)
boolean = mClassList(element).contains(token)
boolean = mClassList(element).toggle(token[, force])
classList = mClassList(element).replace(token, newToken)
(See mClassList.methodChain
for the return value.)
By default, mClassList(element)
returns a native classList
if element
has it.
You can set mClassList.ignoreNative = true
to use shim always. For example, this is used for browsers that don't support multiple arguments for methods even though the element
has classList
.
By default, following methods return the classList
instance itself.
Therefore you can use "Method chaining".
For example:
mClassList(element)
.add('foo', 'bar')
.remove('baz');
Note that this behavior differs from the standard API specification.
If you want the standard behavior, set mClassList.methodChain = false
to make the methods return a void
.