3

クラスを指定して(ツリーの上位に)最も近くなるための最良の方法は何ですか。ただし、親の兄弟である可能性があります。

「errors1」要素を要素「.start」で開始したい

<div>
    ...
    <div class="errors">errors2</div>
    <div>
        .....
        <div class="errors">errors1</div>
        ...
        <div>...</div>
        <div>
            .....
            <div class="start"></div>            
        </div>     
    </div>
</div>

スクリプトを作成しましたが、それは本当に悪く、まったく機能しません。

http://jsfiddle.net/9DfCJ/1/

ありがとう

編集: 構造が動的であることを強化するために「...」を追加しました。重要なのは、ツリーの最も近い「.errors」を見つけることです。

4

6 に答える 6

1
$(this).parent().siblings(':first')
于 2011-02-15T04:23:46.250 に答える
1

jQuery のprev()コマンドを調査します。たとえば、「開始」クラスのコンテキストで以前の「エラー」を見つけて非表示にするには、次のようにします。

$('.start').click(function(){
  $(this).prev('.errors').hide();
});

詳細はこちら: http://api.jquery.com/prev/

アップデート:

parent()ネストが多い場合は、上向きにトラバースする方が運が良いかもしれません。parent()また、引数としてセレクターを取ります...引数がないと、現在のノードの親を取得します。

http://api.jquery.com/parent/

于 2011-02-15T04:12:21.127 に答える
1

素晴らしい質問です。以下のコードはあなたのために働くはずです。.startを持つ要素が見つかるまで、の各親をループします.errors.errors次に、最も近い要素のテキストを警告します.start

jQuery(function($){

    var $start = $('.start'),
        $parents = $start.parents();

    $parents.each(function(){
        var $this = $(this),
            $thisErrors = $this.find('.errors'),
            numErrors = $thisErrors.length;

        if(numErrors){
            alert($thisErrors.eq(numErrors-1).text());
            return false;
        }

    });

});
于 2011-02-15T04:49:04.503 に答える
0

ツリーを上ってすべてのエラーを取得したい場合は、次のようにすることができます。

var start = $(".start"),
    current = start.parent(),
    parent = current,
    end_class = "stop",
    get_errors = function(elt) {
        return elt.children(".errors");
    },
    errors = get_errors(current)

    while (parent = current.parent()) {

        $.merge(errors, get_errors(parent));
        if (parent.hasClass(end_class)) {
           break;
        }   
        current = parent;
    }

最後に、errorsすべてのエラーが含まれます。

end_classただし、トップ divに追加する必要があります。

<div class="stop">
    ...
    <div class="errors">errors2</div>
    ...
</div>
于 2011-02-15T04:48:47.460 に答える
0

私はいくつかの掘り下げを行い、セレクターに一致する最初の要素を取得するための何かを見つけました。現在の要素から始まり、上に進みます:

var myText = $(".start").closest($(".errors")).text(); 

詳しくはこちらをご覧ください。イベントを使用してこのコードを呼び出すことができます。

于 2012-01-26T05:30:03.737 に答える