jQuery查找next和prev元素

前端之家收集整理的这篇文章主要介绍了jQuery查找next和prev元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试找到当前元素的next或prev元素。但是next()和prev()函数只能在一个范围内工作,它不能到达外部。例如,这是我想要实现的:
  1. <ul id="ul1">
  2. <li>1</li>
  3. <li>2</li>
  4. <li>3</li>
  5. <li>
  6. <ul id="ul2">
  7. <li>4</li>
  8. <li>
  9. <ul id="ul3">
  10. <li>5</li>
  11. <li>6</li>
  12. </ul>
  13. </li>
  14. <li>7</li>
  15. <li>8</li>
  16. </ul>
  17. </li>
  18. <li>9</li>
  19. </ul>

如果当前元素为ul1,则next元素为< li> 1< / li>,prev元素为null。

如果当前元素为< li> 1< / li>,则下一个元素为< li> 2< / li>,prev元素为ul1

如果当前元素为< li> 8< / li>,则下一个元素为< li> 9< / li>,prev元素为< li> 7< / li>

解决方法

首先,这是一个非常整洁的问题。感谢发帖!

我用一个链接的jQuery语句完成了这个。只有事情是,如果你运行上面的()顶部ul你会得到身体。我认为技术上有道理。但是,如果这不是所需的行为,请参阅下面的更新。

用法:next(“#ul3”)返回< li> 5< / li>

下一个:

  1. function next(selector) {
  2. var $element = $(selector);
  3.  
  4. return $element
  5. .children(":eq(0)")
  6. .add($element.next())
  7. .add($element.parents().filter(function() {
  8. return $(this).next().length > 0;
  9. }).next()).first();
  10. }

以前:

  1. function prevIoUs(selector) {
  2. var $element = $(selector);
  3.  
  4. return $element
  5. .prev().find("*:last")
  6. .add($element.parent())
  7. .add($element.prev())
  8. .last();
  9. }

更新如果要限制以前最上方的节点可以,可以做:

  1. function prevIoUs(selector,root) {
  2. var $element = $(selector);
  3.  
  4. return $element
  5. .prev().find("*:last")
  6. .add($element.parent())
  7. .add($element.prev())
  8. .last().not($(root).parent());
  9. }

http://jsfiddle.net/andrewwhitaker/n89dz/

另一个更新:为了方便起见,这是一个jQuery插件

  1. (function($) {
  2. $.fn.domNext = function() {
  3. return this
  4. .children(":eq(0)")
  5. .add(this.next())
  6. .add(this.parents().filter(function() {
  7. return $(this).next().length > 0;
  8. }).next()).first();
  9. };
  10.  
  11. $.fn.domPrevIoUs = function() {
  12. return this
  13. .prev().find("*:last")
  14. .add(this.parent())
  15. .add(this.prev())
  16. .last();
  17. };
  18. })(jQuery);

扩展示例:http://jsfiddle.net/andrewwhitaker/KzyAY/

猜你在找的jQuery相关文章