2009-08-13 2 views
2

У меня есть эта линия, которая успешно выбрать все элементы класса «MyClass» на моей странице:Как выбрать элементы в массиве с помощью jQuery?

var myTerms = $(".myTerm"); 

выше линия работает, myTerms представляет собой массив из всех myTerm, каждый из которых содержит «подтермов».

Затем, когда я повторяю каждый myTerm, я хочу использовать jQuery для возврата массива «subTerms» внутри этого myTerm.

Я пробовал:

var myTerms = $(".myTerm"); 
for (var i = 0; i < myTerms.length; i++) { 
    var myTerm = queryTerms[i]; 
    subTerms = myTerm.$("subTerms"); 

Но это еще не идти. Является ли jQuery даже для этого или лучше вернуться к простому сценарию Java.

EDIT

подтерме является имя класса элементов внутри myTerm

+0

Что именно вы хотите сделать с «подтермов» после того, как вы запрашиваете их? – gnarf

+0

subTerms на самом деле являются исключительно выпадающими списками, поэтому я просто хочу получить их значения. – Matt

+0

Не могли бы вы привести HTML-пример некоторых условий для нас? Сложно ли это делать слепым – gnarf

ответ

6

Любопытное замешательстве от того, что возражают подтермы, но я дам ему выстрелили.

$('.myTerm').each(function(){ 
    subTerms = $(this).children(); 
}); 

** Редактировать **

Если вы хотите выбирать опции, сделать

$('.myTerm').each(function(){ 
    subTerms = $(this).children('.subTerm option'); 
}); 
+1

. Дети() предполагает прямых потомков? возможно .find() - это то, что вы имели в виду? – gnarf

1

Пара вещей, чтобы указать. $(".myTerm") не массив - его объект jquery, вы можете использовать для него петли, но each намного лучше. Внутри функции each()this относится к DOMElement. Кроме того, если вы хотите найти больше объектов внутри объекта JQuery вы можете использовать $element.find('.subterm') или $('.subTerm', element)

$(".myTerm").each(funciton() { 
    // look for any .subTerm that exist underneath of us 
    var subTerms = $(".subTerm", this); 

    // do something with subTerms as an example.... 
    var text = []; 
    subTerms.each(function() { 
    // .val() assuming its an option element 
    // .text() might be better. 
    text.push($(this).val()); 
    }); 

    alert(text.join(";")); 
}); 
1

вы можете охват второй вызов запроса просто смотреть под найденному термин

$(".myTerms").each(function() { 
    var sub = $(".subTerms", this); 
}); 
+0

хорошая сжатая версия моего ответа за 3 минуты до твоей. ;) – gnarf

+0

Я медленный типер, что я могу сказать :) – Jaime

2

I Не уверен, что ты просишь. Похоже, вы хотите совместить все элементы, у которых есть класс myterm + другой класс в вашем списке, например. <li class="myterm subterm1">

Я бы справился с этим в селекторе. Селекторы jQuery могут совпадать с несколькими классами, если они разделены запятой, например. «subterm1, subterm2, subterm3», поэтому, если вы присоедините их к строке, вы можете ее фильтровать.

var result = $(".myterm").filter(myterms.join(",")); 
0

Если вы не хотите, чтобы изменить код, то вы можете использовать следующие

var myTerms = $(".myTerm"); 
for (var i = 0; i < myTerms.length; i++) { 
    var myTerm = queryTerms[i]; 
    var $myTerm = $(myTerm); 
    subTerms = $myTerm.find("subTerms"); 
}