Povedzme, že mám tento kód HTML:
<div id="div_box">
<ul>
<li class="li1"></li>
<li class="li2"></li>
<li class="li3"></li>
</ul>
</div>
A chcem odstrániť triedu "li1".
Vyskúšal som to s jQuery:
$("#div_box").find(".li1").removeClass("li1");
Funguje to, ale nechápem, prečo to funguje. Pri reťazení sa metóda vzťahuje iba na daný selektor. #div_box
nemá triedu s názvom "li1", takže by to nemalo fungovať.
Chápem, ako funguje reťazenie? Mohol by niekto objasniť, prečo to funguje?
odpovede:
0 pre odpoveď č. 1Na .Nájsť() metóda vráti všetkých potomkov #div_box
ktorý má triedu li1
...
Nie všetky jQuery metódy vracajú rovnakú množinu objektov, na ktoré boli povolané ... väčšinou prechádzanie stromom metódy vracajú inú množinu objektov
0 pre odpoveď č. 2
Reťazovanie bude ukazovať na object
ktorý je evaluated
nedávno, Vo vašom prípade nedávno hodnotené object
je výsledok .find(".li1")
, Ak to chcete pridať #div_box
do selektora, potom musíte použiť .addBack()
vo vašom súčasnom kontexte.
0 pre odpoveď č. 3
je to dobre vysvetlené v dokumentácii ... http://api.jquery.com/find/
na
.find()
metóda nám umožňuje hľadať medzi potomkami tieto prvky v strome DOM a postaviť nový objekt jQuery z zodpovedajúce prvky.Prvý podpis pre.find () metóda prijíma selektor výraz rovnakého typu, ktorý môžeme odovzdať funkcii $ (). prvky budú filtrované testovaním, či sa zhodujú s týmto selektorom.
so zámerom prejsť k prvkom
Na rozdiel od ostatných metód stromového posuvu,selektor vo výzve na .find () sa vyžaduje výraz. Ak potrebujeme získať späť všetky potomkové prvky, môžeme prejsť univerzálnym selektorom "*" na dosiahnutie tohto cieľa.