4
<tr>
    <th scope="row">
        <span id="home_location_indicator">(Home)</span>
    </th>
    <td>
        <span class="postal_code_display">...</span>
    </td>
    <td><input value="1" name="location_select" type="radio" /></td>
</tr>

たとえば、上記のような<table>カップルを含む があります。<tr>の中で、<tr>を持っているのは 1 つだけ<span id="home_location_indicator">(Home)</span>です。

含まれている に属する入力のを取得するためのアプローチを決定しようとしています。name="location_select"<tr><span id="home_location_indicator">

私が考えることができる2つのアプローチは次のとおりです。

  1. $("tr").has("#home_location_indicator").find('input[name="location_select"]').val()
  2. $("#home_location_indicator").parents("tr").find('input[name="location_select"]').val()

どちらがより良いアプローチですか?なぜ?それとも問題ですか?

4

2 に答える 2

2

あなたの2番目のアプローチは、IDから始まるトラバースを絞り込み、そこからトラバースするため、はるかに優れています..あなたが持っているものを少し変更して以下を参照してください.

編集:使用は->証明.closestよりも優れています.parents

$("#home_location_indicator")
     .closest("tr")
     .find(':radio[name="location_select"]').val()

.has("#home_location_indicator")IDを探しているため、最初のアプローチはあまり意味がありません。ID を取得したい場合$('#IDSelector')は、内部的に を使用するため、最速のセレクターを使用しますdocument.getElementByID('IDSelector')

于 2012-04-10T19:10:22.957 に答える
2

一致が見つかるとトラバースを停止するため、.closest()の代わりにを使用するのが最善の方法です。.parents()

$("#home_location_indicator") // ID, very fast
     .closest("tr") // Upwards traversal, fast, stops at tr
     .find(':radio[name="location_select"]').val() // Find, slow-ish

これは、トップダウンのアプローチよりもはるかに優れています。

$("tr") // getElementsByTagName, very fast
    .has("#home_location_indicator") // traverse EVERY tr ALL the way down, very slow!
    .find('input[name="location_select"]').val() // Find, slow-ish
于 2012-04-10T19:12:52.610 に答える