Skip to content

Instantly share code, notes, and snippets.

@zaucy
Last active October 27, 2015 18:14
Show Gist options
  • Select an option

  • Save zaucy/26efe67d22472eba0934 to your computer and use it in GitHub Desktop.

Select an option

Save zaucy/26efe67d22472eba0934 to your computer and use it in GitHub Desktop.
SearchableDocumentFragment
"use strict";
var createSearchableDocumentFragment = (function() {
var SearchableDocumentFragmentMethods = {
getElementsByTagName(tagName) {
tagName = tagName.toUpperCase();
var elementsWithTagName = [];
for(let i=0; this.children.length > i; i++) {
let child = this.children[i];
if(child.tagName == tagName) {
elementsWithTagName.push(child);
}
elementsWithTagName = [].slice.call(child.getElementsByTagName(tagName)).concat(elementsWithTagName);
}
return elementsWithTagName;
},
getElementsByClassName(classNames) {
var elementsWithClassName = [];
var classes = classNames.split(/\s+/);
for(let i=0; this.children.length > i; i++) {
let child = this.children[i];
let childContainsAllClasses = true;
for(let n=0; classes.length > n; n++) {
let className = classes[n];
if(!child.classList.contains(className)) {
childContainsAllClasses = false;
break;
}
if(childContainsAllClasses) {
elementsWithClassName.push(child);
}
}
elementsWithClassName = [].slice.call(child.getElementsByClassName(classNames)).concat(elementsWithClassName);
}
return elementsWithClassName;
}
};
return function() {
var docFragment = document.createDocumentFragment();
for(var methodName in SearchableDocumentFragmentMethods) {
docFragment[methodName] = SearchableDocumentFragmentMethods[methodName].bind(docFragment);
}
return docFragment;
};
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment