Skip to content

Instantly share code, notes, and snippets.

@ritalin
Created February 21, 2013 09:23
Show Gist options
  • Save ritalin/5003448 to your computer and use it in GitHub Desktop.
Save ritalin/5003448 to your computer and use it in GitHub Desktop.
Using cheerio-soupselect as cheerio selector implementation
/*
* Module dependencies
*/
var CSSselect = function(query, dom) {
return require('cheerio-soupselect').select(dom, query);
};
var isArray = Array.isArray;
/*
* Select function
*/
exports = module.exports = function(query, dom) {
dom = normalize(dom);
return CSSselect(query, dom);
};
/*
* Normalize the dom
*/
var normalize = exports.normalize = function(dom) {
dom = dom.cheerio ? dom.toArray() : dom;
dom = isArray(dom) ? dom : [dom];
var len = dom.length,
out = [],
elem;
for(var i = 0; i < len; i++) {
elem = dom[i];
if(elem.type === 'root') {
out = out.concat(elem.children || []);
} else {
out.push(elem);
}
}
return out;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment