jQuery Succinct Selectarea jQuery

Filtrele jQuery personalizate pot selecta elemente atunci când sunt utilizate singure

Nu este necesar să se furnizeze un element real împreună cu un filtru, cum ar fi $ ( 'Div: ascunse'). Este posibil să treci pur și simplu filtrul singur oriunde este de așteptat o expresie selector.

Cateva exemple:

 // Selectează toate elementele ascunse $ (': hidden'); // Selectează toate elementele div, apoi selectează doar elemente egale $ ('div'). Filter (': even');

Grokking: Filtru ascuns și: vizibil

Filtrele selectate jQuery selector :ascuns și :vizibil nu țineți cont de proprietatea de vizibilitate CSS așa cum s-ar putea aștepta. Modul în care jQuery determină dacă un element este ascuns sau vizibil este dacă elementul consumă orice spațiu în document. Pentru a fi exact, un element este vizibil în cazul în care browser-ul raportat offsetWidth sau offsetHeight este mai mare decât 0. În acest fel, un element care ar putea avea un CSS afişa valoarea bloc conținută într-un element cu a afişa valoarea nici unul ar raporta cu exactitate că nu este vizibilă.

Examinați codul cu atenție și asigurați-vă că înțelegeți de ce este returnată valoarea Adevărat chiar dacă

fiind selectat are un stil inline de display: block.

    

Utilizarea metodei Is () pentru a returna o valoare booleană

Este adesea necesar să se determine dacă setul de elemente selectat conține, de fapt, un element specific. Utilizarea este() , putem verifica setul curent față de o expresie / filtru. Verificarea va reveni Adevărat dacă setul conține cel puțin un element care este selectat de expresia / filtrul dat. Dacă nu conține elementul, a fals valoarea este returnată. Examinați următorul cod:

    
jQuery
jQuery

Ar trebui să fie evident că al doilea alerta() va întoarce o valoare de false pentru că setul de învelitoare nu conținea a

care a avut un id valoarea atributului I2. este() metoda este destul de utilă pentru a determina dacă setul de învelitori conține un element specific.

Note: Începând cu jQuery 1.3, este() metoda suporta toate expresiile. Anterior, expresii complexe, cum ar fi cele care conțin selectori de ierarhie (cum ar fi +, ~, și >) întotdeauna a revenit Adevărat.

Filtrul este utilizat de alte funcții jQuery interne. Prin urmare, toate regulile care se aplică acolo se aplică și aici.

Unii dezvoltatori folosesc este (“. clasa) pentru a determina dacă un element are o anumită clasă. Nu uitați că jQuery are deja o metodă de a face acest lucru numit hasClass ( 'clasa'), care pot fi utilizate pe elemente care conțin mai mult de o valoare de clasă. Dar adevărul trebuie spus, hasClass () este doar un ambalaj convenabil pentru este() metodă.


Puteți trece jQuery mai mult decât o expresie selector

Puteți furniza primul parametru al funcției jQuery câteva expresii separate printr-o virgulă: $ ('expresie, expresie, expresie'). Cu alte cuvinte, nu vă limitați la selectarea elementelor utilizând doar o singură expresie. De exemplu, în exemplul de mai jos, trec funcția jQuery cu trei expresii separate printr-o virgulă.

    
jQuery

este

  • Cel mai bun!

Fiecare dintre aceste expresii selectează elementele DOM care sunt toate adăugate în setul de învelitori. Apoi putem opera pe aceste elemente folosind metode jQuery. Rețineți că toate elementele selectate vor fi plasate în același set de învelitori. Un mod ineficient de a face acest lucru ar fi numirea funcției jQuery de trei ori, o dată pentru fiecare expresie.


Verificarea setării pachetului pentru a determina selecția

Este posibil să determinați dacă expresia dvs. a selectat ceva verificând dacă setul de învelitori are o lungime. Puteți face acest lucru utilizând proprietatea matrice lungime. În cazul în care lungime proprietatea nu întoarce 0, atunci știi că cel puțin un element se potrivește cu expresia pe care ai trecut-o la funcția jQuery. De exemplu, în codul de mai jos verificăm pagina pentru un element cu un id de "nu". Ghici ce? Nu este acolo!

       

Note: Dacă nu este evident, proprietatea lungime poate de asemenea să raporteze numărul de elemente din setul de învelitori - altfel spus, câte elemente au fost selectate de expresia trecută la funcția jQuery.


Crearea de filtre personalizate pentru selectarea elementelor

Capacitățile motorului selector jQuery pot fi extinse prin crearea propriilor filtre personalizate. În teorie, tot ceea ce faceți aici se bazează pe selectorii personalizați care fac deja parte din jQuery. De exemplu, spunem că dorim să selectăm toate elementele de pe o pagină Web care sunt absolut poziționate. Deoarece jQuery nu are deja personalizat : positionAbsolute filtru, putem crea propriul nostru.

    
absolut
absolut
static
absolut
static
absolut

Cel mai important lucru pentru a înțelege aici este faptul că nu vă limitați la selectorii impliciți furnizați de jQuery. Puteți crea propriul dvs. Cu toate acestea, înainte de a vă petrece timpul creând propria versiune a unui selector, puteți încerca pur și simplu filtru() cu o funcție de filtrare specificată. De exemplu, aș fi putut evita să scriu : positionAbsolute selectând simplu filtrarea

elemente din exemplul meu anterior cu o funcție pe care o trec la filtru() metodă.

 // Elimina 
elemente din wrap // set care nu sunt absolut pozitionate $ ('div'). (functie () return $ (this) .css ('position') === 'absolut';); // sau // Eliminați toate elementele din wrapper // set care nu sunt absolut poziționate $ ('*'). filtru (funcția () return $ (this) .css ('position') === ' ;);

Note: Pentru informații suplimentare despre crearea propriilor selectori, vă recomandăm următoarele: http://www.bennadel.com/blog/1457-How-To-Build-A-Custom-jQuery-Selector.htm


Diferențele dintre filtrarea prin ordine numerică vs. relații DOM

jQuery oferă filtre pentru filtrarea unui set de wrapper de către contextul numeric al unui element din cadrul setului.

Aceste filtre sunt:

  • :primul
  • :ultimul
  • :chiar
  • :ciudat
  • : Eq (index)
  • : Gt (index)
  • : Lt (index)

Note: Filtrele care filtrează setul de wrapper fac acest lucru prin filtrarea elementelor din set la un punct de pornire de 0 sau index de 0. De exemplu : Eq (0) și :primul accesați primul element din set - $ ( 'Div: eq (0)') - care este la un index 0. Acest lucru este în contrast cu : Nth-copil filtru care este unul indexat. Înseamnă, de exemplu, : Nth-copil (1) va întoarce primul element copil, dar încearcă să îl folosească : Nth-copil (0) nu va funcționa. Utilizarea : Nth-copil (0) va selecta întotdeauna nimic.

Utilizarea :primul va selecta primul element din set în timp ce :ultimul va selecta ultimul element din set. Amintiți-vă că filtrează setul pe baza relației (ierarhia numerică pornind de la 0) în set, dar nu și a relațiilor elementelor în contextul DOM. Având în vedere aceste cunoștințe, ar trebui să fie evident de ce filtrele :primul, :ultimul, și : Eq (index) va întoarce întotdeauna un singur element.

Dacă nu este evident, permiteți-mi să explic mai departe. Motivul pentru care :primul se poate întoarce doar un singur element deoarece este posibil să existe un singur element dintr-un set care este considerat primul atunci când există doar un singur set. Acest lucru ar trebui să fie destul de logic. Examinați codul de mai jos pentru a vedea acest concept în acțiune.

    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Cu o înțelegere clară a manipulării setului în sine, putem crește înțelegerea noastră cu privire la selectarea elementelor utilizând filtrele care selectează elemente care au relații unice cu alte elemente din DOM real. jQuery oferă mai mulți selectori pentru a face acest lucru. Unele dintre aceste selectori sunt personalizate, în timp ce unele sunt expresii CSS bine cunoscute pentru selectarea elementelor DOM.

  • descendent al strămoșilor
  • mamă> copil
  • prev + următoarea
  • previziuni
  • : Nth-child (Selector)
  • :primul copil
  • :ultimul copil
  • :singurul copil
  • :gol
  • : Are (selector)
  • :mamă

Folosirea acestor filtre de selecție va selecta elemente bazate pe relația lor în cadrul DOM-ului în ceea ce privește alte elemente din DOM. Pentru a demonstra acest concept, să ne uităm la un cod.

    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

Dacă sunteți surprins de faptul că $ ( 'Li: nth-copil (nui adevărat)'). Text () returnează valoarea 135135, nu sunteți încă filtre de relații grokking. Declaratia, $ ( 'Li: nth-copil (nui adevărat)') spus verbal ar fi "a găsi toate

  • elementele din pagina web care sunt copii și apoi să le filtreze de copii ciudați. "Ei bine, se întâmplă doar că în pagină există două structuri care au o grupare de frați alcătuită din
  • s. Ideea mea este următoarea: setul de învelitori este alcătuit din elemente bazate pe un filtru care ia în considerare relația unui element cu alte elemente din DOM. Aceste relații pot fi găsite în mai multe locații.

    Conceptul de luat este că nu toate filtrele sunt create în mod egal. Asigurați-vă că înțelegeți ce filtre se bazează pe relațiile DOM-de ex. :singurul copil-și care sunt filtrate după poziția elementelor - de ex. : Eq ()-în setul înfășurat.


    Selectarea elementelor după Id când valoarea conține meta-caractere

    Selectorii jQuery utilizează un set de meta-caractere (de ex. # ~ [] => ) că atunci când este folosit ca o parte literală a unui nume (de ex. id = "# foo [bar]") ar trebui să fie scape. Este posibil să scăpați de caractere prin plasarea a două spate în fața caracterului. Examinați codul de mai jos pentru a vedea cum folosirea a două backslash-uri în expresia de selecție ne permite să selectăm un element cu o valoare a atributului id #foo [bar].

        
    jQuery

    Aici este lista completa a caracterelor care trebuie scapate atunci cand sunt folosite ca o parte literala a unui nume.

    • #
    • ;
    • &
    • ,
    • .
    • +
    • *
    • ~
    • '
    • :
    • "
    • !
    • ^
    • $
    • [
    • ]
    • (
    • )
    • =
    • >
    • |
    • /

    Stabilirea filtrelor de selecție

    Este posibilă stivuirea filtrelor de selecție - de ex. un [title = "jQuery"] [href ^ = "http: //"]. Exemplul evident al acestui lucru este selectarea unui element care are atribute specifice cu valori specifice ale atributelor. De exemplu, codul jQuery de mai jos va selecta numai elemente din pagina HTML care:

    • Conține un href atribut cu o valoare de pornire a "http: //"
    • Ia o titlu atribut cu o valoare de "jQuery"

    Unul singur este selectat.

        jQuery.com jQuery.com 1 jQuery.com    

    Observați în cod modul în care am stivuit două filtre pentru a realiza această selecție.

    Alte filtre selector pot fi stivuite pe lângă filtrele de atribute. De exemplu:

     // Selectați ultima 
    care conține textul "jQuery" $ ('div: last: conține ("jQuery")') // Obțineți toate căsuțele care sunt vizibile și selectate $ (': caseta de validare: „)

    Conceptul de luat este că filtrele de selecție pot fi stivuite și utilizate în combinație.

    Note: Puteți, de asemenea, să cuibărești și să stivezi filtre - de ex. . $ ( 'P') filtru ( ': nu (: în primul rând): nu (: ultima)')


    Nesting Selector Filters

    Filtrele de selecție pot fi imbricate. Acest lucru vă permite să folosiți filtre într-un mod foarte concis și puternic. Mai jos, vă dau un exemplu despre cum puteți asambla filtrele pentru a efectua filtrarea complexă.

        
    JavaScript
    jQuery
    JavaScript
    jQuery
    JavaScript
    jQuery

    Conceptul de luat este că filtrele de selecție pot fi imbricate.

    Note: Puteți, de asemenea, să cuibărești și să stivezi filtre - de ex. . $ ( 'P') filtru ( ': nu (: în primul rând): nu (: ultima)')


    Grokking filtrul nth-child ()

    : Nth-copil () filtrul are multe utilizări. De exemplu, spuneți că doriți doar să selectați fiecare treime

  • element cuprins într - un