这个问题引起了我的兴趣,因为它具有很多实际意义。我喜欢 OP 自己的答案,但我认为它可以通过容器上的单个方法链以声明方式(更直观地)完成。所以我把它煮成这样:
$("#container div").each(function () {
$(this).toggleClass('rightMost',
$(this).is(':last-child') ||
$(this).position().left >= $(this).next().position().left
);
});
由于.next()
在最后一个元素上返回 null,因此您需要让最后一个元素的条件也通过.is(':last-child')
此外,由于容器可能仅对一个元素足够宽——在这种情况下,所有元素都应标记为最右边——当当前元素的 position().left 大于或等于该元素时,该条件应适用.next() 的。
您可以看到它在工作并包装在一个功能中,该功能在文档就绪和窗口调整大小时都被触发:http: //jsfiddle.net/mhfaust/TdXZJ/
更新
如果期望的效果不仅仅是应用/删除类名,则可以更普遍地应用条件(尽管不太优雅),如下所示:
$("#container div").each(function () {
if($(this).is(':last-child') || $(this).position().left >= $(this).next().position().left)){
// do one thing...
}
else{
// ... or do the other.
}
});