0

我想选择所有元素父母和他们的第一个孩子,以及原始元素本身。这是标记的示例:

<ul id="end-here">
  <li>
    <a href="/path">Link</a>
  </li>
  <li class="select-me">
    <a class="select-me" href="/path">Another link</a>
    <ul>
      <li>
        <a href="/path">Submenu link</a>
      </li>
      <li class="select-me">
        <a class="select-me" id="start-here" class="change-me" href="/path">Another submenu link</a>
      </li>
    </ul>
  </li>
</ul>

所以从 $('#start-here') 我想要所有的 $('.select-me') 停止在 $('#end-here')

到目前为止我有这个

$('#start-here').add($('#start-here').parentsUntil('#end-here', 'li, a'))

然而,这错过了 a 标签子元素,因为它们不是原始元素的直接父元素。所以上面的以下元素不包括在内:

<a class="select-me" href="/path">Another link</a>
4

2 回答 2

3

您的示例代码与您所要求的不匹配,“选择所有元素父母及其第一个孩子,以及原始元素本身”。这是示例代码的外观:

<ul id="end-here">
  <li class="select-me">
    <a href="/path">Link</a>
  </li>
  <li>
    <a class="select-me" href="/path">Another link</a>
    <ul>
      <li class="select-me">
        <a href="/path">Submenu link</a>
      </li>
      <li>
        <a class="select-me" id="start-here" class="change-me" href="/path">Another submenu link</a>
      </li>
    </ul>
  </li>
</ul>​

和 jQuery 选择器:

$("#start-here").parentsUntil("#end-here").andSelf().map(function(){
    return $(this).parent().children()[0];
});

select-me以上返回示例中具有该类的四个元素。

但是,如果您的示例代码是正确的,则选择过程不可能是通用或灵活的,您将不得不指定一些元素类型:

var elems = $("#start-here").parentsUntil("#end-here", "li");
elems.add(elems.children("a"));

感谢Stano提供上述解决方案。

于 2012-10-04T11:57:17.940 回答
0

未经测试,但我认为它应该是这样的:

$('#start-here').add($('#start-here').andSelf().parentsUntil('#end-here', 'li, a')).andSelf().children().first();
于 2012-10-04T11:27:56.527 回答