jQuery: selezione di elementi dall'interno di un elemento


94

diciamo che ho un markup come questo:

<div id="foo">
  ...
  <span id="moo">
    ...
  </span>
  ...
</div>

e voglio selezionare #moo.

perché $('#foo').find('span')funziona, ma $('span', $('#foo'));non lo fa?


10
Perché no $('#moo')? ;) Btw. funziona: jsfiddle.net/fkling/k5X2r
Felix Kling,

Non so perché, ma la funzione che aggancio allo span selezionato viene applicata a tutti gli span della pagina, non solo a quello all'interno di #foo :(
Alex

2
E quando hai già l'elemento selezionato in una var, quindi ad esempio inizi con var ele = $("div #foo")come puoi arrivare a moo da qui (senza usare riferimenti ad array)
Worthy7

Risposte:


129

Puoi utilizzare uno qualsiasi di questi [a partire dal più veloce]

$("#moo") > $("#foo #moo") > $("div#foo span#moo") > $("#foo span") > $("#foo > #moo")

Guarda


1
Penso che il terzo dovrebbe essere span # moo non span # foo?
xr280xr

60

In realtà, $ ('# id', this); selezionerebbe #id a qualsiasi livello discendente, non solo al figlio immediato. Prova questo invece:

$(this).children('#id');

o

$("#foo > #moo")

o

$("#foo > span")

Ciò non selezionerà nulla perché l'elemento ha l' ID moo , non la classe.
Felix Kling

3
Vale la pena notare che .children()e .find()sono simili tranne per il fatto che il primo viaggia solo un livello più in basso nel sottoalbero DOM.
Kevin,

Funziona bene, grazie ;-)
Ali Lashini

9

Perché non usare semplicemente:

$("#foo span")

o

$("#foo > span")

$('span', $('#foo')); funziona bene sulla mia macchina;)


$($(elementA), 'tr#' + key + ' span')non funziona per me (jQuery 1.10.2)
Cody

8

È possibile utilizzare l' findopzione per selezionare un elemento all'interno di un altro. Ad esempio, per trovare un elemento con id txtName in un particolare div, puoi usare like

var name = $('#div1').find('#txtName').val();

6

Dai un'occhiata qui - per interrogare un sottoelemento di un elemento :

$(document.getElementById('parentid')).find('div#' + divID + ' span.child');


3

.... ma $ ('span', $ ('# foo')); non funziona?

Questo metodo viene chiamato per fornire il contesto del selettore .

In questo fornisci un secondo argomento al selettore jQuery . Può essere qualsiasi stringa di oggetto CSS, proprio come si passerebbe per la selezione diretta o un elemento jQuery.

per esempio.

$("span",".cont1").css("background", '#F00');

La riga sopra selezionerà tutti gli intervalli all'interno del contenitore con la classe denominata cont1.

DEMO


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.