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
classListof 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
classListif 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).lengthtoken = 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.