0

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

4

3 に答える 3

2

$.index()次のように使用できます。

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

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

于 2011-10-14T17:18:42.450 に答える
2

「実際の」以前の入力要素を返す新しい 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/

于 2011-10-14T17:19:32.707 に答える
1

他の両方の回答は、使用している要素が探している要素と同じタイプであることを前提としています。任意の場合、これは機能するはずです (大きなファイルではパフォーマンスが低下します)。

他の2つの答えを組み合わせるようなもの:

(function($){
    $.fn.realPrev = function(selector){
        var all = $("*");

        return all.slice(0,all.index(this)).filter(selector).last();
    }
})(jQuery);

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

于 2011-10-14T18:03:51.250 に答える