jQuery Kort gezegd jQuery selecteren

Aangepaste jQuery-filters kunnen elementen selecteren die alleen worden gebruikt

Het is niet nodig om een ​​feitelijk element te leveren in combinatie met een filter, zoals $ ( 'Div: verborgen'). Het is mogelijk om het filter eenvoudigweg te passeren, overal waar een selectoruitdrukking wordt verwacht.

Een paar voorbeelden:

 // Selecteert alle verborgen elementen $ (': hidden'); // Selecteert alle div-elementen en selecteert vervolgens alleen even elementen $ ('div'). Filter (': even');

Grokking the: Hidden and: Visible Filter

De aangepaste jQuery-selectorfilters :verborgen en :zichtbaar houd geen rekening met de CSS-zichtbaarheidseigenschap zoals je zou verwachten. De manier waarop jQuery bepaalt of een element verborgen of zichtbaar is, is of het element ruimte in het document verbruikt. Om precies te zijn, een element is zichtbaar als zijn browser-gerapporteerd offsetWidth of offsetHeight is groter dan 0. Op die manier een element dat een CSS kan hebben tonen waarde van blok vervat in een element met een tonen waarde van geen zou nauwkeurig melden dat het niet zichtbaar is.

Bestudeer de code zorgvuldig en zorg ervoor dat u begrijpt waarom de teruggegeven waarde is waar ook al is het

wordt geselecteerd heeft een inline-stijl van display: block.

    

De methode Is () gebruiken om een ​​Booleaanse waarde te retourneren

Het is vaak nodig om te bepalen of de geselecteerde set elementen inderdaad een specifiek element bevat. De ... gebruiken is () methode, kunnen we de huidige set vergelijken met een expressie / filter. De cheque zal terugkeren waar als de set ten minste één element bevat dat is geselecteerd door de gegeven expressie / filter. Als het element niet aanwezig is, vals waarde wordt geretourneerd. Bestudeer de volgende code:

    
jQuery
jQuery

Het moet duidelijk zijn dat de tweede alert () retourneert een waarde van false omdat onze wrapper-set geen a bevatte

dat had een ID kaart attribuutwaarde van i2. De is () methode is best handig om te bepalen of de wrapset een specifiek element bevat.

Opmerkingen: Vanaf jQuery 1.3, de is () methode ondersteunt alle uitdrukkingen. Eerder complexe expressies zoals die met hiërarchieselectieprogramma's (zoals +, ~, en >) altijd teruggekeerd waar.

Filter wordt gebruikt door andere interne jQuery-functies. Daarom zijn hier ook alle regels van toepassing die hier van toepassing zijn.

Sommige ontwikkelaars gebruiken is ('. class') om te bepalen of een element een specifieke klasse heeft. Vergeet niet dat jQuery al een methode heeft om dit te doen met de naam hasClass ( 'klasse'), die kan worden gebruikt op elementen die meer dan één klassenwaarde bevatten. Maar de waarheid wordt verteld, hasClass () is gewoon een handige verpakking voor de is () methode.


U kunt jQuery meer dan één selectoruitdrukking doorgeven

U kunt de eerste parameter van de jQuery-functie verschillende uitdrukkingen geven, gescheiden door een komma: $ ('uitdrukking, uitdrukking, uitdrukking'). Met andere woorden, u bent niet beperkt tot het selecteren van elementen met slechts één uitdrukking. In het onderstaande voorbeeld geef ik bijvoorbeeld de jQuery-functie drie uitdrukkingen door, gescheiden door een komma.

    
jQuery

is de

  • het beste!

Elk van deze expressies selecteert DOM-elementen die allemaal aan de set wrapper zijn toegevoegd. We kunnen dan op deze elementen werken met behulp van jQuery-methoden. Houd er rekening mee dat alle geselecteerde elementen in dezelfde set worden geplaatst. Een inefficiënte manier om dit te doen, is de jQuery-functie drie keer op te roepen, eenmaal voor elke expressie.


Wrapper-set .lengte controleren om selectie te bepalen

Het is mogelijk om te bepalen of je expressie iets heeft geselecteerd door na te gaan of de set wrapper een lengte heeft. U kunt dit doen met behulp van de array-eigenschap lengte. Als het lengte eigenschap retourneert geen 0, dan weet u dat ten minste één element overeenkomt met de expressie die u hebt doorgegeven aan de functie jQuery. In de onderstaande code controleren we bijvoorbeeld de pagina voor een element met een ID kaart van "niet." Raad eens? Het is er niet!

       

Opmerkingen: Als dit niet voor de hand ligt, kan de eigenschap length ook het aantal elementen in de set wrapper rapporteren - op een andere manier aangegeven, hoeveel elementen zijn geselecteerd door de expressie die is doorgegeven aan de functie jQuery.


Aangepaste filters maken voor het selecteren van elementen

De mogelijkheden van de jQuery-selectorengine kunnen worden uitgebreid door uw eigen aangepaste filters te maken. In theorie, alles wat je hier doet is voortbouwen op de aangepaste selectors die al deel uitmaken van jQuery. Stel dat we bijvoorbeeld alle elementen op een webpagina willen selecteren die absoluut zijn gepositioneerd. Aangezien jQuery nog geen aangepaste versie heeft : positionAbsolute filter, we kunnen onze eigen maken.

    
absoluut
absoluut
statisch
absoluut
statisch
absoluut

Het belangrijkste om hier te begrijpen is dat je niet beperkt bent tot de standaard selectors geleverd door jQuery. U kunt uw eigen maken. Voordat u echter de tijd besteedt aan het maken van uw eigen versie van een selector, kunt u het eenvoudigweg proberen filter() methode met een specifieke filterfunctie. Ik had bijvoorbeeld kunnen voorkomen dat ik de : positionAbsolute selector door simpelweg de

elementen in mijn vorige voorbeeld met een functie die ik doorgeef aan filter() methode.

 // Verwijderen 
elementen uit de wrapper // sets die niet absoluut gepositioneerd zijn $ ('div'). filter (function () return $ (this) .css ('position') === 'absolute';); // or // Verwijder alle elementen uit de wrapper // stel dat niet absoluut gepositioneerd is $ ('*'). filter (function () return $ (this) .css ('position') === 'absolute' ;);

Opmerkingen: Voor meer informatie over het maken van uw eigen selectors, raad ik aan het volgende te lezen: http://www.bennadel.com/blog/1457-How-To-Build-A-Custom-jQuery-Selector.htm


Verschillen tussen filteren op numerieke volgorde versus DOM-relaties

jQuery biedt filters voor het filteren van een wrapper die is ingesteld op basis van de numerieke context van een element binnen de set.

Deze filters zijn:

  • :eerste
  • :laatste
  • :zelfs
  • :vreemd
  • : Eq (index)
  • : Gt (index)
  • : Lt (index)

Opmerkingen: Filters die de wrapper-set filteren, doen dit door elementen in de set te filteren op een startpunt van 0 of een index van 0. Bijvoorbeeld : Eq (0) en :eerste toegang tot het eerste element in de set - $ ( 'Div: eq (0)') - die op een 0-index staat. Dit staat in contrast met de : N-kind filter dat is geïndexeerd. Betekenis, bijvoorbeeld, : N-kind (1) zal het eerste onderliggende element retourneren, maar proberen te gebruiken : N-kind (0) zal niet werken. Gebruik makend van : N-kind (0) zal altijd niets selecteren.

Gebruik makend van :eerste zal het eerste element in de set selecteren terwijl :laatste selecteert het laatste element in de set. Onthoud dat ze de set filteren op basis van de relatie (numerieke hiërarchie beginnend bij 0) binnen de set, maar niet de relaties van de elementen in de context van de DOM. Gezien deze kennis, zou het duidelijk moeten zijn waarom de filters :eerste, :laatste, en : Eq (index) zal altijd een enkel element retourneren.

Als het niet voor de hand ligt, sta me toe het verder uit te leggen. De reden dat :eerste kan alleen een enkel element retourneren, omdat er maar één element in een set kan zijn dat als eerste wordt beschouwd als er maar één set is. Dit zou redelijk logisch moeten zijn. Bekijk de onderstaande code om dit concept in actie te zien.

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

Met een duidelijk begrip van het manipuleren van de set zelf, kunnen we ons begrip van het selecteren van elementen vergroten door filters te gebruiken die elementen selecteren die unieke relaties hebben met andere elementen binnen de werkelijke DOM. jQuery biedt verschillende selectors om dit te doen. Sommige van deze selectors zijn op maat, terwijl sommige bekende CSS-uitdrukkingen zijn voor het selecteren van DOM-elementen.

  • voorouder-afstammeling
  • ouder> kind
  • vorige + volgende
  • vorige broers en zussen
  • : N-kind (selector)
  • :eerstgeborene
  • :laatste kind
  • :enig kind
  • :leeg
  • : Heeft (selector)
  • :ouder

Het gebruik van deze selectorfilters selecteert elementen op basis van hun relatie binnen de DOM met betrekking tot andere elementen in de DOM. Laten we, om dit concept te demonstreren, eens naar een code kijken.

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

Als je verrast bent door het feit dat $ ( 'Li: n-kind (oneven)'). Tekst () retourneert de waarde 135135, je bent nog geen grokking-relatiefilters. De verklaring, $ ( 'Li: n-kind (oneven)') zei verbaal zou zijn "alles vinden

  • elementen op de webpagina die kinderen zijn en filter ze vervolgens op vreemde kinderen. "Wel, het is zo dat er twee structuren op de pagina zijn met een groep broers en zussen bestaande uit
  • s. Mijn punt is dit: de wrapper set bestaat uit elementen op basis van een filter die rekening houdt met de relatie van een element met andere elementen in de DOM. Deze relaties zijn te vinden op meerdere locaties.

    Het concept om mee weg te nemen is dat niet alle filters gelijk worden gemaakt. Zorg ervoor dat u begrijpt welke filters zijn op basis van DOM-relaties, bijvoorbeeld. :enig kind-en welke filteren op de positie van de elementen - bijv. : Eq ()-in de omwikkelde set.


    Elementen op id selecteren wanneer de waarde metatekens bevat

    jQuery-selectors gebruiken een reeks metakarakters (bijv. # ~ [] => ) die bij gebruik als een letterlijk deel van een naam (bijv. id = "# foo [bar]") moet worden ontsnapt. Het is mogelijk om te ontsnappen aan tekens door twee backslashes vóór het teken te plaatsen. Bekijk de onderstaande code om te zien hoe we met behulp van twee backslashes in de selectie-expressie een element met een id-attribuutwaarde van #foo [bar].

        
    jQuery

    Hier is de volledige lijst met tekens die moeten worden geëscaped wanneer deze worden gebruikt als een letterlijk deel van een naam.

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

    Selectorfilters stapelen

    Het is mogelijk om selectorfilters te stapelen, bijvoorbeeld. a [title = "jQuery"] [^ href = "http: //"]. Het voor de hand liggende voorbeeld hiervan is het selecteren van een element met specifieke kenmerken met specifieke attribuutwaarden. De jQuery-code hieronder selecteert bijvoorbeeld alleen elementen in de HTML-pagina die:

    • Bevatten een href kenmerk met een startwaarde van "http: //"
    • Heb een titel kenmerk met de waarde "jQuery"

    Maar een wordt geselecteerd.

        jQuery.com jQuery.com 1 jQuery.com    

    Let in de code op hoe we twee filters hebben gestapeld om deze selectie te voltooien.

    Andere selectorfilters kunnen naast alleen kenmerkfilters worden gestapeld. Bijvoorbeeld:

     // Selecteer de laatste 
    in de // wrapperset die de tekst "jQuery" $ bevat ('div: last: contains ("jQuery")') // Schakel alle selectievakjes in die zowel zichtbaar als geselecteerd zijn $ (': checkbox: visible: checked ')

    Het concept om mee te nemen is dat selectorfilters kunnen worden gestapeld en in combinatie kunnen worden gebruikt.

    Opmerkingen: Je kunt ook filters nesten en stapelen - bijvoorbeeld. . $ ( 'P') filter ( ': niet (: first): niet (: laatste)')


    Selectiefilters nesten

    Selectorfilters kunnen worden genest. Hierdoor kunt u filters op een zeer beknopte en krachtige manier gebruiken. Hieronder geef ik een voorbeeld van hoe u filters kunt nesten om complexe filtering uit te voeren.

        
    javascript
    jQuery
    javascript
    jQuery
    javascript
    jQuery

    Het concept om mee te nemen is dat selectorfilters kunnen worden genest.

    Opmerkingen: Je kunt ook filters nesten en stapelen - bijvoorbeeld. . $ ( 'P') filter ( ': niet (: first): niet (: laatste)')


    Grokking het: nth-child () filter

    De : N-kind () filter heeft veel toepassingen. Stel bijvoorbeeld dat u alleen elke derde wilt selecteren

  • element vervat in a