Як отримати лише прямі дочірні елементи за допомогою функції 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>of 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) також працює для мене. Дякую.
Джейсон Лі

1
Це чудово, я не знав, що ви можете використовувати прямий дочірній селектор ( >), не вказуючи нічого перед ним. Дякую.
silkfire

3
Зверніть увагу, що для прямих дітей, які знаходяться лише на одному рівні нижче, ви можете просто використовувати "діти ([селектор])".
orad

37
ПРЯМІ ДІТИ = діти нижчого рівня , тому api.jquery.com/children - це правильна відповідь, а не find () - отримується ВСІ нащадки елемента (відфільтровано селектором) ...
jave.web

4
Ви повинні зробити свій коментар окремою відповіддю jave.web, оскільки ваш - це правильна відповідь.
mrmillsy

23

Як згадував @ jave.web у коментарях

Для пошуку через прямі дочірні елементи елемента .children(). Він буде шукати лише безпосередніх дітей, а не проходити глибше. http://api.jquery.com/children/


5

Саме з цієї причини слід бути обережним із вкладеними таблицями. Я дуже сподіваюся, що ви використовуєте їх для даних, а не для макета сторінки.

Ще одна проблема, яка, ймовірно, зіпсує вам день, - це використання селекторів CSS на вкладених таблицях ... у вас, в основному, така ж проблема - ви не можете вибрати елементи TR зовнішньої таблиці, не вибравши також елементи всередині внутрішньої таблиці. (Ви не можете використовувати дочірній селектор, оскільки він не реалізований в IE6)

Це має спрацювати:

$("#table1 > tbody > tr")

Однак я рекомендую вам жорстко закодувати елемент TBODY, оскільки вам не слід покладатися на браузер, щоб створити його для вас.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.