Caratteri jolly nei selettori jQuery


669

Sto cercando di utilizzare un carattere jolly per ottenere l'id di tutti gli elementi il ​​cui id inizia con "jander". Ho provato $('#jander*'), $('#jander%')ma non funziona ..

So di poter usare le classi degli elementi per risolverlo, ma è anche possibile usare i caratteri jolly ??

<script type="text/javascript">

  var prueba = [];

  $('#jander').each(function () {
    prueba.push($(this).attr('id'));
  });

  alert(prueba);


});

</script>

<div id="jander1"></div>
<div id="jander2"></div>

2
Questa è una domanda su jQuery (o più esattamente sul motore Sizzle).
Peter Örneholm,

1
Solo una nota: sarebbe molto più veloce farlo con le classi poiché jQuery o Sizzle possono utilizzare le funzioni del browser (non dovrebbe fare molta differenza per i browser moderni).
Felix Kling,


7
Inoltre, una cosa importante da notare è che $("[id*=jander]")selezionare tutti gli elementi con un ID contenente il jander di stringa.
Gabriel Ryan Nahmias l'

Risposte:


1281

Per ottenere tutti gli elementi che iniziano con "jander" dovresti usare:

$("[id^=jander]")

Per ottenere quelli che finiscono con "jander"

$("[id$=jander]")

Vedi anche la documentazione di JQuery


22
I documenti forniscono questo esempio:$('input[name^="news"]').val('news here!')
Brenden,

5
Il codice funziona come previsto. Non è necessario raddoppiare il preventivo, aumenta solo le possibilità di perdere un preventivo di chiusura e lo rende meno leggibile.
nico,

4
@nico È interessante notare che i documenti dicono che funziona con gli attributi ed idè tecnicamente una proprietà , ma suppongo che con le versioni più recenti di jquery (ovvero 1.9) e come vengano modificate le ultime modifiche agli attributi e alle proprietà, la linea sia leggermente sfocata rispetto ai due e quindi sei in grado di utilizzare i selettori di attributo per (almeno alcune) proprietà.
johntrepreneur

E se, desidero selezionare anche quelle selezionate. per esempio: attualmente ho .col-lg-4:even div:nth-child(1)se volessi fare lo stesso .... cosa scriverei? "[class^=.col-lg-]:even"? (Non sembra farlo funzionare)
Luis Robles,

Un po 'di comportamento che mi ha sorpreso ---- se lo uso con "class $ = ..." cerca un elenco di classi di un oggetto, non i nomi delle singole classi. Quindi colpisce solo se la classe cercata è l'ultima classe su quell'elemento. Non ho provato altro che Chrome. E non sono sicuro se il difetto sia in jQuery o nelle mie aspettative di jQuery.
Roger Krueger,

115

Dal momento che il titolo suggerisce un carattere jolly, è possibile utilizzare anche questo:

$(document).ready(function(){
  console.log($('[id*=ander]'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="jander1"></div>
<div id="jander2"></div>

Questo selezionerà la stringa data in qualsiasi punto del file id.


39

Prova il jQuery inizia con

selettore, '^ =', ad es

[id^="jander"]

Devo chiederti però, perché non vuoi farlo usando le lezioni?


2
Per aggiungere un contesto, sto cercando la stessa soluzione perché sto usando Django, la cui classe ModelForm detta gli ID in base ai modelli e non sembra consentire un raggruppamento come questo; cioè l'HTML è fuori dal mio controllo.
Christian Mann,

Ciò è utile quando si lavora con ASP.Net WebForms, in particolare gli elenchi Radio e Checkbox.
DavidScherer

35

per le lezioni puoi usare:

div[class^="jander"]

Non sono riuscito a farlo funzionare, ho ricevuto un messaggio sulla sintassi non valida.
stian,

14

Per ottenere l'id dalla corrispondenza jolly:

$('[id^=pick_]').click(
  function(event) {

    // Do something with the id # here: 
    alert('Picked: '+ event.target.id.slice(5));

  }
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="pick_1">moo1</div>
<div id="pick_2">moo2</div>
<div id="pick_3">moo3</div>


2
Invece di "event.target.id" potrebbe funzionare anche questo: $ (this) .attr ("id")
PJ Brunet

10

Quando si dispone di una stringa ID più complessa, le doppie virgolette sono obbligatorie.

Ad esempio se hai un ID come questo: id="2.2" il modo corretto di accedervi è:$('input[id="2.2"]')

Per quanto possibile, usa le doppie virgolette, per motivi di sicurezza.

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.