Skip to content

Instantly share code, notes, and snippets.

@h1k3r
Created July 16, 2014 15:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save h1k3r/f892e69b9a806de7fc8b to your computer and use it in GitHub Desktop.
Save h1k3r/f892e69b9a806de7fc8b to your computer and use it in GitHub Desktop.
Cross-browser js function to retrieve elements by classname from dom. Based on prototype js code
var getElementsByXPath = function(xpath, parentElement) {
var xpathResult = document.evaluate(xpath, parentElement, null, XPathResult.ANY_TYPE, null);
var results = [];
var element = xpathResult.iterateNext();
while(element) {
results.push(element);
element = xpathResult.iterateNext();
}
return results;
}
function hasClassName(element, className) {
return (' ' + element.className + ' ').indexOf(' ' + className + ' ') > -1;
}
var getElementsByClassName = function(className, parentElement) {
if (parentElement.getElementsByClassName) {
return parentElement.getElementsByClassName(className);
} else if (!!document.evaluate) { //detect xpath like prototype does
var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
return getElementsByXPath(q, parentElement);
} else {
var children = parentElement.getElementsByTagName('*');
var elements = [], child;
for (var i = 0, length = children.length; i < length; i++) {
child = children[i];
if (hasClassName(child, className)) {
elements.push(child);
}
}
return elements;
}
};
@h1k3r
Copy link
Author

h1k3r commented Jul 16, 2014

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment