2012-03-05 4 views
4

OK. Я немного нуб ... но не тот нуб-иш. :)jQuery несколько селекторов с точечной записью?

Я хочу выполнить поиск() в jQuery, который имеет аналогичный результат точечной нотации или «& &». Вот пример (который не работает):

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

или

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

Мне сказали, чтобы попробовать запятую, например:

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

... но возвращает неправильные элементы.

Моего XML выглядит следующим образом:

<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> 

В некоторых штатах/провинции/страны имеют один и тот же идентификатор, поэтому я хотел бы найти состояние в указанном continent_country.

Заранее спасибо ...

+0

Вы хотите отделить выбор? Как сначала вы получаете от нас все страны континентов, и из этого выбора вы снова фильтруете все с помощью? –

+0

Я сделал это изначально, но нуждался в «однострочном решении». Детский селектор «>» отлично работал. – TSNev

ответ

4

я думаю, что вы хотите ребенка обозначения:

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

что-то вроде

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

Perfect. Большое спасибо! – TSNev

+0

рад, что я могу помочь! – Patricia

+0

wow 3 downvotes? Что не так с людьми? это именно то, что хотел! – Patricia

1

Вы можете просто использовать add() метод, который добавляет больше элементов выбора на основе нового селектора, например,

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

не нужно, так как это проблема селектора – soju

+1

Но этот способ все еще работает. Просто потому, что есть * другие * способы, это не значит, что этот подход неверен – danwellman

+0

Это не лучший подход, так как вы вызываете дополнительный метод – soju

0

Вы можете использовать либо :has селектор, функцию .has или выбрать ближайший continent_country выше государства. Вот функция has, которая, вероятно, самая эффективная.

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

Это предполагает, что вы хотите получить <continent_country> элементы ... если я неправильно понял, и вы хотите получить <state> элементы, использовать пространство:

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

Не могли бы вы попробовать метод .has()?

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

Это должно сработать.

-1

Если вы хотите, состояние внутри страны, вы должны использовать descendant selectorcontinent_country[id='us'] state[id='in']

или А child selector: continent_country[id='us'] > state[id='in']

Вы должны узнать больше о jquery selectors

+0

downvoter объяснить себя – soju

Смежные вопросы