classlist.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * Minimal classList shim for IE 9
  3. * By Devon Govett
  4. * MIT LICENSE
  5. */
  6. if (!("classList" in document.documentElement) && Object.defineProperty && typeof HTMLElement !== 'undefined') {
  7. Object.defineProperty(HTMLElement.prototype, 'classList', {
  8. get: function() {
  9. var self = this;
  10. function update(fn) {
  11. return function(value) {
  12. var classes = self.className.split(/\s+/),
  13. index = classes.indexOf(value);
  14. fn(classes, index, value);
  15. self.className = classes.join(" ");
  16. }
  17. }
  18. var ret = {
  19. add: update(function(classes, index, value) {
  20. ~index || classes.push(value);
  21. }),
  22. remove: update(function(classes, index) {
  23. ~index && classes.splice(index, 1);
  24. }),
  25. toggle: update(function(classes, index, value) {
  26. ~index ? classes.splice(index, 1) : classes.push(value);
  27. }),
  28. contains: function(value) {
  29. return !!~self.className.split(/\s+/).indexOf(value);
  30. },
  31. item: function(i) {
  32. return self.className.split(/\s+/)[i] || null;
  33. }
  34. };
  35. Object.defineProperty(ret, 'length', {
  36. get: function() {
  37. return self.className.split(/\s+/).length;
  38. }
  39. });
  40. return ret;
  41. }
  42. });
  43. }