jQuery関数で直接の子要素のみを取得する方法


89

私はこのようなテーブル構造を持っています:

<table1>
  <tbody>
    <tr>
      <td></td>
        ...
      <td>
        <table2>
          <tbody>
            <tr>
              <td></td>
            </tr>
          </tbody>
        </table>
      </td>
    </tr>
   </tbody>
  </table>

JavaScriptでは、私は、変数持つtblの値を$(table1)、そして私は、すべての直接の子要素(TR)を取得したい<tbody>のをtable1。私のコードは:

$('tr', tb1)

どうやらそれは<tr>table1とtable2のすべての要素を返します。私は通り抜けることができると思います

$('tr', tb1).not(function(){return $(this).parent().parent()[0] != tb1;})

またはこの種のロジック。

$('table1 > tbody > tr')は直接の子供を得ることができることを知っていますtr。残念ながらこれは使えません。

誰かがこれについて良い考えを持っていますか?

ありがとう。

回答:


178

あなたが使用することができますfind()

tbl.find("> tbody > tr")


2
これは勇敢な考えです。$( '> tbody> tr'、tb1)も私のために働きます。ありがとうございました。
Jason Li

1
これは素晴らしい>ことです。前に何も指定せずに直接子セレクター()を使用できることを知りませんでした。ありがとうございました。
Silkfire 2013年

3
1レベル下の直接の子の場合は、単に「children([selector])」を使用できることに注意してください。
orad 2013年

37
DIRECT CHILDREN = 1レベル下の子、したがってapi.jquery.com/childrenが正解であり、find()ではありません-要素のすべての子孫を取得します(セレクターでフィルター処理されます)...
jave.web 2014年

4
あなたのコメントが正解なので、コメントを別の回答jave.webにする必要があります。
mrmillsy 2014年

23

@ jave.webがコメントで述べたように

要素の直接の子を検索するには、を使用します.children()。直接の子を検索するだけで、それ以上深くは移動しません。http://api.jquery.com/children/


5

これがまさに、テーブルのネストに注意する必要がある理由です。ページレイアウトではなく、データにご利用いただければ幸いです。

おそらくあなたの一日を台無しにするもう一つの問題は、ネストされたテーブルでCSSセレクターを使用することです...基本的に同じ問題があります-内側のテーブル内の要素を選択せず​​に外側のテーブルのTR要素を選択することもできません。(IE6には実装されていないため、子セレクターは使用できません)

これは機能するはずです:

$("#table1 > tbody > tr")

ただし、TBODY要素をハードコーディングすることをお勧めします。これは、ブラウザーに依存してTBODY要素を作成するべきではないためです。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.