1

動的なコードを書き込もうとしていますが、後の要素が兄弟または兄弟の子であるかどうかを確認できません。私はクラスを持っているだけで、私の要素の後にこのクラスを持つ最初の要素を検索する必要があります。例:

   <something class='EitherMe'/>

   <table>
     <thead class = 'EitherMe'></thead>
     <tbody>
       <tr class = 'selectAfterThis'><td></td></tr>
        .
        .
        .
     </tbody>
     <tfoot class ='EitherMe'>
       <tr></tr>
       <tr class='OrMe'></tr>
     </tfoot>
   </table>

   <something class='OrMe'/>

ユーザーのニーズに応じて、「EitherMe」または「OrMe」を取得します。そして、「selectAfterThis」の後に続くそのクラスの要素を正確に選択する必要があります

nextAll()は機能しません。それは兄弟だけを取得するからです。これを行う方法はありますか?

更新:私は上記の例にtheadを入れました。ほとんどの提案は親を経由していたためです。そして、クラスが上位にある要素がないかどうかは本当にわかりません。クラスの正確な場所を制限することでプラグインを制限できますが、可能であればそれを避けたいと思います。

update2:簡単に言えば、「selectAfterThis」の下にある、指定されたクラスの要素が必要です。これは、彼のすぐ下か、はるか下か、または「selectAfterThis」との親子関係は関係ありません。

アップデート3:これがwireyの答えから書いたミニプラグインです。私のような問題を抱えている他の人に役立つことを願っています:http://jsfiddle.net/jTLt2/4/。すべてのクレジットはwireyに送られます。親の兄弟や親の兄弟の子よりも深くなるように、いくつかの変更を加えました。

テストする場合はお知らせください。100%動作するか知りたい

ここにコードがあります:

(function($){
    $.fn.nextInView = function(selector)
    {
        var ret = this.nextAll(selector);      
        for(var i = 0;this.parents().eq(i).find('body').length < 1 ;i++){
            ret = ret.add(this.parents().eq(i).nextAll(selector));  
            ret = ret.add(this.parents().eq(i).nextAll().find(selector));
        }            
        return ret.first();
    }
})(jQuery)
4

1 に答える 1

1

それらをコレクションに個別に追加する必要があります..次に、コレクションから最初のものを取得して、最も近いものを見つけます

// get siblings first - they will always be before parents
var ele = $('.selectAfterThis').nextAll('.OrMe');
// get parent siblings after current parent - they will be before their children
ele = ele.add($('.selectAfterThis').parent().nextAll('.OrMe'));
// get descendants that match of parent slibings
ele = ele.add($('.OrMe',$('.selectAfterThis').parent().nextAll()));
// now get first in collection
ele.first();​

http://jsfiddle.net/fRq4z/

于 2012-12-12T20:10:55.313 に答える