Qual è lo scopo dei due punti iniziali in un selettore jQuery?


84

Ho iniziato a utilizzare il toolkit Wijmo e mi sono imbattuto in alcuni selettori di esempio simili a questo nelle loro pagine di documentazione:

$(":input[type='radio']").wijradio();

Avrei scritto il mio così:

$('input[type=radio]').wijradio();

Questi fanno lo stesso o c'è qualcosa che mi manca?

Nota che ci sono due differenze sopra: il primo selettore è preceduto da due punti e ha virgolette per il tipo di input.


4
Uno è il :inputselettore specializzato , mentre l'altro è un Elementselettore generico .
mellamokb

Risposte:


85

:inputè un'estensione jQuery mentre inputè un selettore CSS.

textarea, button, Ed selectelementi sarebbero abbinati dal primo, ma non la seconda.

Quest'ultimo è più veloce, quindi usalo per il tuo radioesempio specifico . Da usare :inputquando vuoi "tutti gli elementi del modulo" anche se non sono strettamente <input>tag. Anche in questo caso, la raccomandazione è di utilizzare prima un selettore CSS standard, quindi utilizzarlo .filter(':input')su quel set.

Poiché: input è un'estensione jQuery e non fa parte della specifica CSS, le query che utilizzano: input non possono trarre vantaggio dall'aumento delle prestazioni fornito dal metodo querySelectorAll () DOM nativo. Per ottenere le migliori prestazioni quando si utilizza: input per selezionare gli elementi, selezionare prima gli elementi utilizzando un selettore CSS puro, quindi utilizzare .filter (": input").

Nella fonte 1.7.2, il filtro: input verifica un'espressione regolare rispetto a nodeName:

input: function( elem ) {
            return (/input|select|textarea|button/i).test( elem.nodeName );
},

Ha senso, grazie! E le virgolette sono completamente opzionali?
Morten Mertner

1
Onestamente, non ho mai usato [type=]con :input, perché se sto cercando un tipo specifico, utilizzando :inputper ottenere tutti loro prima vista sembra la strada lunga. Per i selettori CSS puri, la mia comprensione è che le virgolette sono standard, ma i browser perdonano. Puoi testarlo rapidamente con / senza qui reference.sitepoint.com/css/css3attributeselectors/demo
David Ruttka

quindi $ (": verificato") fornisce le caselle spuntate .. è anche questa estensione jquery?
Vishal Sharma

@David Ruttka: "i browser perdonano" si applica solo all'HTML e ai CSS in modalità stranezze. Questa affermazione non si applica ai CSS in modalità standard. Le virgolette possono essere legalmente omesse in alcuni casi.
BoltClock

possiamo avere un esempio di first select the elements using a pure CSS selector, then use .filter(":input").?
Poutrathor

17

il $("input")selettore sceglierà solo gli elementi del tipo input

mentre il $(":input")selettore catturerà tutti gli elementi di input (come textarea, select, input ecc ...)

per ulteriori informazioni, vai alla documentazione ufficiale di jQuery sul :inputselettore su:

http://api.jquery.com/input-selector/


6

Il :inputselettore seleziona fondamentalmente tutti i formcontrolli (input, textarea, select e button elements) dove come inputselector seleziona tutti gli elementi in base al nome del tag input.

Poiché il pulsante di opzione è un formelemento e utilizza anche i inputtag, quindi entrambi possono essere utilizzati per selezionare il pulsante di opzione. Tuttavia, entrambi gli approcci differiscono nel modo in cui trovano gli elementi e quindi ciascuno ha diversi vantaggi in termini di prestazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.