jQuery查找最近的元素

4

是否有一种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


我不知道有这样一个方法。但是,你可以将几个方法链接在一起,以获得这种效果:$('.c').parent().children('.b'); - War10ck
1
如果 .d 而不是 .b,你该如何区分两者?那么你会有两个元素,它们相互之间的距离相同,一个在正方向,另一个在反方向。 - Kevin B
5
你所谈论的是一个视角问题。我认为子元素更接近于.c,因为它驻留在其中。 - Rooster
2
显然,这种方法并不存在,因为很难决定在可能出现的许多不同情况下什么被认为是最接近的,从而导致一种令人困惑/难以理解的方法。 - Kevin B
1
你可以根据操作顺序编写自己的函数。你需要决定parent(),sibling()或child()哪个优先(以及顺序是什么)。 - zethus
显示剩余2条评论
1个回答

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/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接