4

Excelのフリーズペインでテーブルの行または列をロックするjQueryプラグインを構築しようとしています。(これには他にも多くの優れた解決策がありますが、さまざまな理由でどれもうまくいきませんでした。テーブルがモーダルポップアップ内にあることに関係があると思います。しかし私は逸脱します。)

この一環として、プラグインオプションで指定された、特定のテーブルの最初のn行または列を選択しようとしています。問題は、一部の行に他のネストされたテーブルが含まれていることです。残念ながら、これについては何もできません。だから私の質問は、どうすれば<tr>テーブル内の最初のレベルのsだけを取得するのですか?.children('tr')行が必ずしもテーブルの直接の子であるとは限らないため、使用が常に機能するとは限りません。<thead> または(理想的には)ユーザーが包含要素でプラグインを呼び出すことができる可能性があり、それを見つけるのに十分賢いはずです。その中のテーブル
編集:実際、IDでテーブルを選択する必要がある場合、2番目のビットは機能しないと考えています。しかし、プラグインをテーブルでのみ使用するように依頼するのはそれほど多くないと思います。

つまり、特定の包含要素の直接の子である場合とそうでない場合がある、テーブル行の最初のレベルのみを選択するにはどうすればよいですか?

この答えの後半に基づいて私がこれまでに思いついたのは、これでした:

$el.find('tr:not(tr tr):lt('+base.options.rows+')')

および列の場合:

$el.find('tr:not(tr tr)').find('(td,th):lt('+base.options.columns+')')

しかし、それはひどく長くて不格好なようで、私はそれを行うためのより短く/よりクリーンな方法があるかどうか疑問に思っています。または、単純な古いjavascriptを使用する方法はありますか?

編集2: どうやらセレクターバージョンは実際には.not()よりも高速です。私へのニュース。

4

2 に答える 2

2

正しいセレクターを使用してください。この場合、それは>、直接の子セレクターになります。

$el.find('#table > tbody tr > td, #table > tbody tr > th');

その他のオプションについては、「 jQueryセレクター」を参照してください。

または、次のすべての直接の子を繰り返し処理しますtbody

var cells = $el.children('tbody').children('tr').children();

の子としてのみ許可されているtdので、それはすでに必要なリストになっているはずです。trtr

于 2012-08-09T15:14:53.377 に答える
1

テーブルに「ID」を付けて、開始点を取得し、直接の子セレクターを使用します

$('tableID, tableID > tbody,tableID > thead, tableID > tfoot').children('tr')

tr は、その特定のテーブルのテーブル、tbody、または thead の下にある可能性があるため

于 2012-08-09T15:20:51.603 に答える