0

次の HTML があるとします。

<table>
  <tr id="row1">
    <td class="CommandLinks">
      <input type="checkbox" class="CommandLinks" />
    </td>
    <td class="Class2">
      <input type="text" value="1">
    </td>
    <td class="Class3">
      <input type="text" value="1">
    </td>
    <td class="Class4">
      <input type="text" value="1">
    </td>
    <td class="Class5">
      <input type="text" value="1">
    </td>
  </tr>
  <tr id="row2">
    ...
  </tr>
  ...
</table>

次を使用して最初のチェックボックスを取得できます。

var row = $('tr#row1');
var checkbox = row.find('input[data-trackingid]');

ただし、jQuery は行内のすべてのセルをスキャンする必要があるため、余分なオーバーヘッドが少しあることに気付きました。みたいなことを考えていたのrow.find('tr[class=CommandLinks] > input[data-trackingid]')ですが、うまくいかないことがわかりました。

のみを検索するように上記のクエリを変更するにはどうすればよい$('tr[class=CommandLinks]')ですか?

注: このチェックボックスを見つける方法は他にもあると思いますが、実際のアプリケーションでは、上記のように属性で検索したいと考えています。

4

2 に答える 2

1

まず、する必要はありませんtr#row1。ID セレクターは 1 つだけを探します

以下を使用するだけで、パフォーマンスに関する懸念はありません。

var checkbox = $('#row1 .CommandLinks input[data-trackingid=foo]');

以下に示すように、わずかに高速ですが、それほど大きくはありません!

1

jsPerf: http://jsperf.com/jquerychildrenperf

于 2013-03-28T20:03:07.810 に答える
1

これはうまくいくはずです:

var row = $('tr#row1');
var checkbox = row.find('td.CommandLinks > input[data-trackingid]');

その要素に data-trackingid が設定されている場合。

またはこれ:

var row = $('tr#row1');
var checkbox = row.find('td.CommandLinks').find('> input[data-trackingid]');

これは jQuery で同等です。

于 2013-03-28T20:03:08.963 に答える