jQuery:n selaus - end() -menetelmä
Esimerkki
Valitaan kaikki kappaleet, löydetään näistä kappaleista span-elementit, ja ne palautetaan kappaleiksi, ja kappaleet asetetaan kahden pixelin punaiseksi reunaksi:
$("p").find("span").end().css("border", "2px red solid");
Määritelmä ja käyttö
end() -menetelmä lopettaa nykyisessä ketjussa olevan lähimmän suodatustoiminnon ja palauttaa match-elementtikokoelman aiempaan tilaan.
Syntaksi
.end()
Yksityiskohtainen selitys
Useimmat jQuery:n selausmenetelmät käsittelevät jQuery-objektin instanssia ja luovat uuden objektin, joka vastaa erilaisia DOM-elementtikokoelmia. Kun tämä tapahtuu, uusi elementtikokoelma tulisi lisätä objektiin säilytettävään pinoon. Jokaisen onnistuneen suodatusmenetelmän kutsuminen lisää uuden elementin pinoon. Jos tarvitsemme vanhan elementtikokoelman, voimme käyttää end() -metodia poistaa uuden kokoelman pinosta.
Oletetaan, että sivulla on pari lyhyttä luetteloa:
<ul class="first"> <li class="foo">list item 1</li> <li>list item 2</li> <li class="bar">list item 3</li> </ul> <ul class="second"> <li class="foo">list item 1</li> <li>list item 2</li> <li class="bar">list item 3</li> </ul>
Esimerkki 1
jQuery:n ketjutusominaisuus (komentoketju) on hyödyllinen erityisesti, kun käytetään jQuery:n ketjutusominaisuutta. Jos ei käytetä ketjutusta, yleensä kutsutaan edellistä objektia muuttujan avulla, joten emme tarvitse käsitellä pilaalia. Kuitenkin end() voi yhdistää kaikki metodikutsut:
$('ul.first').find('.foo').css('background-color', 'red') .end().find('.bar').css('background-color', 'green');
Tämä komentoketju hakee ensimmäisestä luettelosta projektit, joilla on nimi foo, ja asettaa niiden taustavärin punaiseksi. end() palauttaa objektin takaisin tilaan ennen find() -kutsua, joten toinen find() etsii '.bar' -elementtejä <ul class="first"> sisällä, ei <li class="foo"> elementeistä luettelossa, ja asettaa niiden taustavärin vihreäksi. Lopputuloksena ensimmäisen luettelon kohteet 1 ja 3 saavat värillisen taustan, mutta toisen luettelon kohteet eivät muutu.
Esimerkki 2
Tämä pitkä jQuery-ketju voidaan esittää rakenteellisena koodipalana, avataupi avaa sisäisen koodipalan, ja end()-menetelmä sulkee koodipalat:
$('ul.first').find('.foo') .css('background-color', 'red') .end().find('.bar') .css('background-color', 'green') .end();
Tämä viimeinen end() ei ole välttämätön, koska hylkäämme tämän jQuery-objektin pian. Kuitenkin, jos kirjoitat koodin tällä tavalla, end() tarjoaa visuaalisen symmetrian ja tekee ohjelmasta järjestelmällisemmän, ainakin kehittäjän näkökulmasta, vaikka hinnaksi tulee hieman suorituskyvyn menetys.