UNPKG

list.js

Version:

The perfect library for lists. Supports search, sort, filters and flexibility. Built to be invisible and work on existing HTML

64 lines (58 loc) 1.87 kB
/** * A cross-browser implementation of getElementsByClass. * Heavily based on Dustin Diaz's function: http://dustindiaz.com/getelementsbyclass. * * Find all elements with class `className` inside `container`. * Use `single = true` to increase performance in older browsers * when only one element is needed. * * @param {String} className * @param {Element} container * @param {Boolean} single * @api public */ var getElementsByClassName = function (container, className, single) { if (single) { return container.getElementsByClassName(className)[0] } else { return container.getElementsByClassName(className) } } var querySelector = function (container, className, single) { className = '.' + className if (single) { return container.querySelector(className) } else { return container.querySelectorAll(className) } } var polyfill = function (container, className, single) { var classElements = [], tag = '*' var els = container.getElementsByTagName(tag) var elsLen = els.length var pattern = new RegExp('(^|\\s)' + className + '(\\s|$)') for (var i = 0, j = 0; i < elsLen; i++) { if (pattern.test(els[i].className)) { if (single) { return els[i] } else { classElements[j] = els[i] j++ } } } return classElements } module.exports = (function () { return function (container, className, single, options) { options = options || {} if ((options.test && options.getElementsByClassName) || (!options.test && document.getElementsByClassName)) { return getElementsByClassName(container, className, single) } else if ((options.test && options.querySelector) || (!options.test && document.querySelector)) { return querySelector(container, className, single) } else { return polyfill(container, className, single) } } })()