classlist.js 1.5 KB

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