I made some time ago, a simple javascript solution for this problem:
https://gist.github.com/yckart/5652296
var nthChild = function (elem, num) { var len = elem.length; var ret = []; var i = 0; // :nth-child(num) if (!isNaN(Number(num))) { for (i = 0; i < len; i++) { if (i === num - 1) return elem[i]; } } // :nth-child(numn+num) if (num.indexOf('+') > 0) { var parts = num.match(/\w/g); for (i = parts[2] - 1; i < len; i += parts[0] << 0) { if (elem[i]) ret.push(elem[i]); } } // :nth-child(odd) if (num === 'odd') { for (i = 0; i < len; i += 2) { ret.push(elem[i]); } } // :nth-child(even) if (num === 'even') { for (i = 1; i < len; i += 2) { ret.push(elem[i]); } } return ret; };
Usage is quite simple and similar to a css selector:
var rows = document.querySelectorAll('li'); var num = nthChild(rows, 2); var formula = nthChild(rows, '3n+1'); var even = nthChild(rows, 'even'); var odd = nthChild(rows, 'odd'); // Note, forEach needs to be polyfilled for oldIE even.forEach(function (li) { li.className += ' even'; }); odd.forEach(function (li) { li.className += 'odd'; }); formula.forEach(function (li) { li.className += ' formula'; }); num.style.backgroundColor = 'black';
http://jsfiddle.net/ARTsinn/s3KLz/
yckart Jul 10 '13 at 18:05 2013-07-10 18:05
source share