Skip to content

The super simple shim for `classList` of HTML and SVG, that transparently intercepts difference between modern browsers and semi-modern browsers.

License

Notifications You must be signed in to change notification settings

anseki/m-class-list

Repository files navigation

mClassList

npm GitHub issues dependencies license

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".

Usage

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');
}

Supported APIs

Following methods and properties are supported. For details of each one, see HTML5 document such as MDN.

length

number = mClassList(element).length

item

token = mClassList(element).item(index)

add

classList = mClassList(element).add(token1[, token2, token3...])

(See mClassList.methodChain for the return value.)

remove

classList = mClassList(element).remove(token1[, token2, token3...])

(See mClassList.methodChain for the return value.)

contains

boolean = mClassList(element).contains(token)

toggle

boolean = mClassList(element).toggle(token[, force])

replace

classList = mClassList(element).replace(token, newToken)

(See mClassList.methodChain for the return value.)

mClassList.ignoreNative

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.

mClassList.methodChain

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.

About

The super simple shim for `classList` of HTML and SVG, that transparently intercepts difference between modern browsers and semi-modern browsers.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published