Reputation: 27001
I have this line which successfully select all elements of class"myclass" on my page:
var myTerms = $(".myTerm");
The above line works, myTerms is an array of all the myTerm, each of which contain "subTerms".
Then as i iterate over each myTerm, I want to use jQuery to return an array of the "subTerms" within that myTerm.
I tried:
var myTerms = $(".myTerm");
for (var i = 0; i < myTerms.length; i++) {
var myTerm = queryTerms[i];
subTerms = myTerm.$("subTerms");
But that's a no go. Is jQuery even intended for this or is it better to fall back to plain old java script.
EDIT
subTerm is the className of elements inside of myTerm
Upvotes: 3
Views: 56647
Reputation: 2623
If you don't want to change your code, then you can use the following
var myTerms = $(".myTerm");
for (var i = 0; i < myTerms.length; i++) {
var myTerm = queryTerms[i];
var $myTerm = $(myTerm);
subTerms = $myTerm.find("subTerms");
}
Upvotes: 0
Reputation: 106392
Couple of things to point out. $(".myTerm")
is not an array - its a jquery object, you can use for loops on it, but each
is much better. Inside of an each()
function this
refers to the DOMElement
. Also, if you want to search for more objects INSIDE of a jQuery object you can use $element.find('.subterm')
or $('.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(";"));
});
Upvotes: 1
Reputation: 751
Kinda confused on what the subterms object is, but I'll give it a shot.
$('.myTerm').each(function(){
subTerms = $(this).children();
});
** Edit **
If you want the select options, do
$('.myTerm').each(function(){
subTerms = $(this).children('.subTerm option');
});
Upvotes: 6
Reputation: 53145
I'm not sure what you're asking. It sounds like you want to match all items which have the class myterm + another class in your list, e.g. <li class="myterm subterm1">
I'd handle this in a selector. jQuery selectors can match on multiple classes if they're comma sparated, e.g. "subterm1, subterm2, subterm3" so if you join them into a string, you can filter on it.
var result = $(".myterm").filter(myterms.join(","));
Upvotes: 2
Reputation: 6814
you can scope the second query call to just look under the found term
$(".myTerms").each(function() {
var sub = $(".subTerms", this);
});
Upvotes: 1