jQuery .prev()的一个类型,不管它的's父等

jQuery .prev() of a type regardless of it's parent etc

本文关键字:不管 父等 类型 prev 一个 jQuery      更新时间:2023-09-26

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

<div>
    <input id="text1" type="text" value="text1" />
</div>
<div>
    <p>Choose your race!</p>
    <input id="text2" type="text" value="text2" />
</div>
<div>
    <div class="labeledField">
        <label>Text 3:</label>
        <input id="text3" type="text" value="text3" />
    </div>
</div>

.prev('input')不起作用,因为它在父级内,.prevAll('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/