Функция Джека Слайта из http://www.codingforums.com/showthread.php?t=83993, основанная на getElementsByClassName, которая выполняет то, что мне нужно, и легко расширяется для получения произвольной функции:
document.getElementsByAttribute = function(attribute, value, tagName, parentElement) {
var children = ($(parentElement) || document.body).getElementsByTagName((tagName || '*'));
return $A(children).inject([], function(elements, child) {
var attributeValue = child.getAttribute(attribute);
if(attributeValue != null) {
if(!value || attributeValue == value) {
elements.push(child);
}
}
return elements;
});
}