jquery найти ближайший элемент

Существует ли функция jQuery, которая сочетает направленную вверх функцию closest() или parents() и направленную вниз функцию children()?

Например:

<span id="container">
    <div class="a 1"></div>
    <div class="b 2"></div>
    <div class="c 3">
        <div class="d 4"></div>
        <div class="b 5"></div>
    </div>
<span>

$(".c").something(".b");должен возвращать "ближайший" .b элемент или .2


person d-_-b    schedule 05.08.2013    source источник
comment
Я не знаю ни одного. Однако вы можете связать несколько вместе, чтобы получить этот эффект $('.c').parent().children('.b');   -  person War10ck    schedule 06.08.2013
comment
Как бы вы различали .b, если бы вместо .d было .b? у вас будет два элемента, которые находятся на одинаковом расстоянии друг от друга, по одному в любом направлении.   -  person Kevin B    schedule 06.08.2013
comment
то, о чем вы говорите, это вопрос точки зрения. Я бы посчитал дочерний элемент ближе к .c, поскольку он находится в нем.   -  person Rooster    schedule 06.08.2013
comment
У вас есть порядок действий? Другими словами, если бы селекторы находились на одинаковом расстоянии от .c, что бы вы хотели вернуть?   -  person adamdehaven    schedule 06.08.2013
comment
Очевидно, что его не существует, потому что было бы трудно решить, что будет считаться наиболее близким во множестве различных ситуаций, которые могут возникнуть, что приводит к запутанному/трудному для понимания методу.   -  person Kevin B    schedule 06.08.2013
comment
Полностью согласен со всеми вами - спасибо... я забыл включить это... Так можно ли с уверенностью сказать, что этого не существует, и это одно или другое (или комбинация)?   -  person d-_-b    schedule 06.08.2013
comment
Вы можете написать свою функцию, в зависимости от порядка операций. Вам нужно решить, имеет ли приоритет parent(), sibling() или child() (и в каком порядке)   -  person zethus    schedule 06.08.2013


Ответы (1)


Я когда-то сделал небольшой closestDesc плагин для этого.

(function( $ ) {

  $.fn.closestDesc = function(selector) {

    var selection = [];

    var query = function () {
      this.children().each(function() {
        if ($(this).is(selector)) {
          selection.push(this);
        }
        else {
          query.call(this);
        }
      });
    };
    query.call(this);

    return this.pushStack(selection, "closestDesc", selector);
  };

})(jQuery);

Это перехватывает всех ближайших потомков, соответствующих селектору.

Скрипт: http://jsfiddle.net/uGR2a/9/

person metadings    schedule 05.08.2013