Я бы предложил лучший способ сделать это - расширить селекторы jQuery. Что-то вроде этого работает хорошо:
$.extend($.expr[':'],{
offsetLeft: function(a,i,m) {
if(!m[3]||!(/^(<|>|=)\d+$/).test(m[3])) {return false;}
var offsetLeft = $(a).offset().left;
return m[3].substr(0,1) === '>' ?
offsetLeft > parseInt(m[3].substr(1),10) :
m[3].substr(0,1) === '<' ? offsetLeft < parseInt(m[3].substr(1),10) :
offsetLeft == parseInt(m[3].substr(1),10);
}
});
Это позволит вам выбирать элементы, используя синтаксис, такой как
$('span:offsetLeft(>10)')
или
$('.someClass:offsetLeft(<10)')
или даже
$('.someClass:offsetLeft(=10)')
Живой пример: http://jsfiddle.net/X4CkC/
Следует добавить, что это подключает селекторы jQuery, которые обычно довольно быстрые, но, несомненно, где-то глубоко внутри происходит цикл. Этого не избежать.