首先,这是一个非常棒的问题。感谢您的发布!
我用一个链接的jQuery语句完成了这个问题。唯一的问题是,如果在顶部的ul上运行previous()
,你会得到body
。我认为从技术上讲这是有道理的。然而,如果这不是期望的行为,请查看下面的我的更新。
用法: next("#ul3")
返回 <li>5</li>
接下来:
function next(selector) {
var $element = $(selector);
return $element
.children(":eq(0)")
.add($element.next())
.add($element.parents().filter(function() {
return $(this).next().length > 0;
}).next()).first();
}
上一个:
function previous(selector) {
var $element = $(selector);
return $element
.prev().find("*:last")
.add($element.parent())
.add($element.prev())
.last();
}
更新 如果你想限制前一个节点的上层节点,可以这样做:
function previous(selector, root) {
var $element = $(selector);
return $element
.prev().find("*:last")
.add($element.parent())
.add($element.prev())
.last().not($(root).parent());
}
另一个更新:这里是一个jQuery插件,为方便起见:
http://jsfiddle.net/andrewwhitaker/n89dz/
(function($) {
$.fn.domNext = function() {
return this
.children(":eq(0)")
.add(this.next())
.add(this.parents().filter(function() {
return $(this).next().length > 0;
}).next()).first();
};
$.fn.domPrevious = function() {
return this
.prev().find("*:last")
.add(this.parent())
.add(this.prev())
.last();
};
})(jQuery);
这里有一个更详细的例子:http://jsfiddle.net/andrewwhitaker/KzyAY/
<li>3</li>
?还有<li>4</li>
吗? - ifaour#ul2
的<li>
元素。 - David Tang