2012-03-05 4 views
4

OK. Je suis un peu un noob ... mais pas ce noob-ish. :)jQuery sélecteurs multiples avec notation par points?

Je désire accomplir un find() dans jQuery qui a un résultat similaire à la notation par points ou "& &". Voici un exemple (ce qui ne fonctionne pas):

data.find("continent_country[id = 'us'].state[id = 'in']").each(function(){ 
// what to do 
} 

ou

data.find("continent_country[id = 'us'] && state[id = 'in']").each(function(){ 
// what to do 
} 

On m'a dit d'essayer une virgule, comme ceci:

data.find("continent_country[id = 'us'], state[id = 'in']").each(function(){ 
// what to do 
} 

... mais renvoie les mauvais éléments.

Mon XML ressemble à ceci:

<continent_country id="us" name="U.S."> 
     <state id="al" name="Alabama"> 
      <city url="" name="auburn"/> 
      <city url="" name="birmingham"/> 
      <city url="" name="dothan"/> 
      <city url="" name="florence/muscle shoals"/> 
      <city url="" name="gadsden-anniston"/> 
      <city url="" name="huntsville/decatur"/> 
      <city url="" name="mobile"/> 
      <city url="" name="montgomery"/> 
      <city url="" name="tuscaloosa"/> 
     </state> 
     <state>//more states</states> 
    </continent_country> 
    </continent_country id="eu" name="Europe"> 
     <state>//more states</states> 
    </continent_country> 

Certains états/provinces/pays partagent le même identifiant, ce qui est la raison pour laquelle je voudrais trouver un état dans un continent_country spécifié.

Merci à l'avance ...

+0

Avez-vous envie de séparer la sélection? Comme d'abord vous avez tous les pays du continent avec nous et à partir de cette sélection, vous filtrez à nouveau tout avec? –

+0

Je l'ai fait à l'origine, mais j'avais besoin d'une «solution à une ligne». L'enfant-sélecteur ">" a parfaitement fonctionné. – TSNev

Répondre

4

Je pense que vous voulez que la notation de l'enfant:

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

quelque chose comme

data.find('continent_country[id = 'us'] > state[id='in']).each(function(){ 
    //do your stuff here 
} 
+0

Parfait. Merci beaucoup! – TSNev

+0

content je pourrais aider! – Patricia

+0

wow 3 downvotes? Quel est le problème avec les gens? c'est exactement ce que l'op voulait! – Patricia

1

Vous pouvez simplement utiliser la méthode add() qui ajoute plusieurs éléments à la sélection en fonction d'un nouveau sélecteur, par exemple

data.find("continent_country[id = 'us']").add("state[id = 'in']").each(function(){ 
    // what to do 
} 
+0

pas besoin car c'est un problème de sélecteur – soju

+1

Mais ça marche toujours. Juste parce qu'il existe d'autres moyens, cela ne signifie pas que cette approche est mauvaise. – danwellman

+0

Ce n'est pas la meilleure approche puisque vous appelez la méthode supplémentaire – soju

0

Vous pouvez utiliser le sélecteur :has, la fonction .has ou sélectionnez le plus proche continent_country au-dessus de l'état. Voici la fonction has, qui est probablement la plus efficace.

data.find("continent_country[id='us']").has("state[id='in']") 

C'est en supposant que vous voulez obtenir les éléments <continent_country> ... si je mal compris et que vous voulez obtenir les <state> éléments, utilisez un espace:

data.find("continent_country[id='us'] state[id='in']") 
0

Pourriez-vous essayer la méthode .has()?

data.find("continent_country[id = 'us']").has("state[id = 'in']").each(function(){ 
// what to do 
} 

Cela devrait fonctionner.

-1

Si vous voulez un Etat dans un pays dans lequel vous devez utiliser un descendant selectorcontinent_country[id='us'] state[id='in']

Ou un child selector: continent_country[id='us'] > state[id='in']

Vous devriez en savoir plus sur jquery selectors

+0

downvoter expliquez-vous – soju

Questions connexes