Что лучше «родитель ()» или «родители ()»? - PullRequest
2 голосов
/ 30 июля 2010

Каков лучший способ получить родительский узел для следующего примера кода?

...
<tr>
  <td>
    <table>
      <tr>
        <td>
          <div class="block_data">
            Hello world!!
          </div>
        </td>
      </tr>
    </table>
  </td>
</tr>




/*Javascript code 1*/
$('.block_data').parents('tr').first()...


/*Javascript code 2*/
$('.block_data').parent().parent()...

Какой из двух кодов быстрее (учитывая производительность, а не кодирование)?Представьте себе такую ​​ситуацию с множеством родителей:

...
<tr>
  <td>
    ...
  </td>
</tr>
...
<tr>
  <td>
    <div>
      <div>
        <div>
          <div class="block_data">
            Hello world!!
          </div>
        </div>
      </div>
    </div>
  </td>
</tr>

Ответы [ 3 ]

5 голосов
/ 30 июля 2010

Поскольку ни один из них на самом деле не работает правильно для нужной вам функциональности, вопрос о том, какой метод быстрее, в некотором роде не относится к делу, не так ли? Вы ищете closest(), а не parent() или parents().В общем, думать о производительности - плохая идея, пока вы не уверены, что у вас есть метод, который работает правильно.

1 голос
/ 30 июля 2010

Использование вами

.parents('tr').first()

выдержит изменения в DOM, когда элемент с обработчиком станет более глубоко вложенным.

В этом случае я бы предпочел использовать

.parents('tr:first')

Другой упомянутый ответ closest('tr').Это действительно сложность между ними.

Некоторым нравится использовать .parents(), потому что его имя более наглядно описывает то, что он делает.Но вы должны знать, что он даст более одного результата, если будет найдено несколько совпадений.Вот где вам нужно .first() или :first, чтобы получить только первый.

Между .closest() и .parents() производительность зависит от браузера.В некоторых быстрых тестах я обнаружил, что IE нравится .parents() лучше, а FF и Webkit - .closest() лучше.

0 голосов
/ 30 июля 2010

На мой взгляд, лучше использовать parents(), потому что в случае изменения кода вы бы ссылались на совершенно другой элемент.Это немного медленнее, но у вас там всего несколько узлов, так что это не должно сильно повлиять.

Лучше использовать parents() и найти нужный элемент, чем (в некоторыхдругой случай) написать много .parent().parent().parent().parent().parent().parent().parent().parent().Код более понятен, имхо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...