5

私が.closest()扱いやすいと思ったのはそうではないことが判明しました(またはおそらく私はばかげた間違いを犯しています)。

私がやろうとしているのは、内部テキストを使用して<label>から要素にアクセスすることです。<div>I AM HERE

<li>
    <label>I WANT TO ACCESS THIS ELEMENT</label>
    <div>...</div>
    <div>
        <input/>
        <input/>
        <input/>
        <div id="start">I AM HERE</div>
    </div>
</li>

私の最初の推測はこれを試すことだったでしょう:

$('#start').closest('label') 

しかし、それは何も返しません。

4

4 に答える 4

14

.closest()最初の選択の祖先要素のみを検索します。.closest()and.siblings()または.children():の組み合わせが必要です。

//find closest parent `<li>` element and then find that element's child `<label>` element
$('#start').closest('li').children('label');

//find the closest parent `<div>` element and then find that element's sibling `<label>` element
$('#start').closest('div').siblings('label');

アップデート

非常に高速なセレクターは、次のように.prev()2回使用することです。.parent()

$('#start').parent().prev().prev();
于 2012-02-23T21:17:19.840 に答える
5

.closest選択した要素の親のみを検索します。これを試して:

$("#start").closest("li").children("label");

アップデート

に変更する.childrenと、"> label"セレクターは減価償却されます。

于 2012-02-23T21:17:26.413 に答える
2

最も近いものは現在の要素から始まり、DOMツリーを上に進みますが、<label>は現在の要素の親ではないため、2つの検索を使用する必要があります。

 $('#start').closest('li').children('label');

これが最も効率的なトラバーサルになります。

于 2012-02-23T21:19:58.340 に答える
0

私はこれが古いことを知っていますが、これが最速の方法です...

$('#start').closest('li').find('label');

find()ネイティブブラウザメソッドをchildren()使用し、ブラウザによって解釈されるJavaScriptを使用します

于 2018-06-19T21:48:57.283 に答える