一个类型的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);