Как получить все элементы справа от другого элемента - PullRequest
2 голосов
/ 28 октября 2011

У меня есть несколько элементов с абсолютным позиционированием.Можно ли получить все элементы с положением, которое находится справа от текущего элемента?

Если да, как это сделать?

Ответы [ 2 ]

2 голосов
/ 28 октября 2011

Я только что написал плагин, который реализует эту функцию. Скрипка: http://jsfiddle.net/FJ5Cp/1/

Логика функции должна быть похожа на:

  1. Получить левую позицию текущего элемента и ширину смещения. Сложите их вместе, чтобы получить правильную границу.
  2. Получите левую позицию и ширину смещения каждого элемента, добавьте их, чтобы получить правую границу. Сравните это значение со значением в единицу.

Использование и функции:

// Basic usage
var allRightElements = $("element").rightOfCurrent();
// Only select ___ elements which are located right of the current element
var allRightElementsFilter = $("element").rightOfCurrent("___");
// Only select ___ elements, which are located right of the current element,
//   which are childs of ####
var allRightFilterInsideSomething = $("element").rightOfCurrent("___", "###");

(function($){
    $.fn.rightOfCurrent = function(selector, context){
        elem = this.eq(0);
        selector = selector || '*';
        context = context || null;
        var currentRight = elem.offset().left + elem.width();
        return $(selector, context).filter(function(){
           var $this = $(this);
           if ($this.css('position') == 'absolute'){
               return $this.offset().left + $this.width() > currentRight;
           }
           return false;
        });
    }
})(jQuery);
0 голосов
/ 28 октября 2011

Используйте .filter(), сравнивая .offset().left каждого элемента с текущим элементом:

var l = currentElement.offset().left;
var righterElements = positionedElements.filter(function(){
    return $(this).offset().left > l;
});
...