一个类型的jQuery .prev(),无论它是父类等

是否有一种简单的方法来获取DOM中先前出现的元素? 如果我正在查看#text3 ,我想获得之前的输入#text2

 

Choose your race!

.prev('input')不起作用,因为它在父.prevAll('input')内部.prevAll('input')似乎也只搜索父级…我在这里遗漏了什么? 这感觉它应该比$('#text3').parent().prev().find('input')容易得多$('#text3').parent().prev().find('input') :D

您可以使用$.index() ,如下所示:

 var previous = null; var inputs = $('input'); var index = inputs.index(this); if (index > 0) { previous = $(inputs[index-1]) } 

例如: http : //jsfiddle.net/pYaBL/1/

我创建了一个新的jQuery插件,它返回“真正的”前一个输入元素。 包含此代码:

 (function($){ $.fn.realPrev = function(selector){ var thisElem = this.get(0); //Get DOM element for comparison var lastElement, foundElement = null; $(selector).each(function(){ if(this == thisElem){ foundElement = lastElement; return false; } lastElement = this; }); return $(foundElement); } })(jQuery); 

用法:

 $("#input3").realPrev("input"); 

小提琴: http : //jsfiddle.net/QWRWh/

其他两个答案都假设您使用的元素与您要查找的元素的类型相同。 如果它是任意的,这应该工作(在较大的文件上性能不是很好)。

结合其他两个答案的排序:

 (function($){ $.fn.realPrev = function(selector){ var all = $("*"); return all.slice(0,all.index(this)).filter(selector).last(); } })(jQuery); 

http://jsfiddle.net/QWRWh/1/