2015-01-03 71 views
0

通過div循環,我想寫一個選擇器來獲取uls,併爲它們中的每一個做些事情。jQuery在選擇器內部找到

我的HTML(簡體)看起來是這樣的:

<div class="foo"> 
    <ul> 
    </ul> 
    <ul> 
    </ul> 
    ... 
</div> 
<div class="foo"> 
    <ul> 
    </ul> 
    <ul> 
    </ul> 
    ... 
</div> 

... 

在此之後:

variable=$(.foo); 

那當然正常工作, 現在我特林做類似

for(var k=0;k<variable.length;k++){ 
variable[k].find('ul').doSomethingWithThese 
} 

但是選擇器在某種程度上是錯誤的。
即使我嘗試了一個簡化的代碼,就像例子中的代碼一樣,代碼也比這個複雜得多,
(在我的div裏面還有很多事情要做,我正在構建一個循環用一個map()函數爲每個div提取一些東西並與其他東西連接,並在其他地方打印所有東西...)
所以請理解我不能像$(「。foo> ul」)那樣去,以及即使我可以想知道爲什麼我的其他嘗試失敗。

我想盡一切能想到的變型,在過去3個小時,其中包括: 使用兒童()代替find()方法,使用get(0)insted的[0],使用get(0)或[0] ('ul')),($('ul')),($('ul')),使用$變量,$。(變量),($。('ul')),使用('ul')(至少嘗試獲得第一個ul),
每個(),而不是一個for循環,創造一切變數, 所有可能的組合所有上述,谷歌,計算器的,api.jquery.com ...

比我想更簡單:

variable[0].children('ul') 
variable[0].children('ul')[0] 

和所有的變型,並且仍然沒有運氣...

回答

0

。您可以使用.each method來遍歷每個元素,然後將其包裝回jQuery對象中,或者繼續使用for循環和換行。

。每個

variable.each(function(index,element){ 
    var jqElement = jQuery(element); //or jQuery(this); 
    var uls = jqElement.find("ul"); 
    uls.each(function(index2,ulElement){ 
     //do stuff 
    }); 
}); 

For循環

for(var k=0;k<variable.length;k++){ 
    var jqElement = jQuery(variable[k]); 
    var uls = jqElement.find('ul'); 
    //etc 
} 

當然,你可以只使用一個單一的選擇,以獲得ULS馬上

uls = jQuery(".foo ul"); 
uls.each(function(index,ulElement){ 
    var jqUL = jQuery(this); 

    //if you need a reference to the parent .foo 
    var parent = jqUL.closest(".foo"); 

    //etc do stuff 
}); 
+0

謝謝,非常完整的答案:)$ – wuwutinh

2
$('.foo ul').each(function(){ 
//do whatever you want 
}) 

有關詳細的使用jQuery的每個()函數,見here

0

嘗試使用.each()功能

$('.foo').each(function(){ 
    var foo = $(this); 
    var uls = foo.find('ul'); 
}); 

$('.foo ul').each(function(){ 
    //code... 
}); 

$('.foo').each(function(){ 
    var foo = $(this); 
    var uls = $('ul', foo); 
}); 
0

使用variable.eachhttp://api.jquery.com/jquery.each/遍歷由第一選擇返回的項目。你也將要當您使用variable[k]variable.get(k)用jQuery對象,它會給你的基本DOM對象,而不是一個jQuery對象改變.foo'.foo'

0

的jQuery返回類似對象數組,其中包含DOM元素匹配你的選擇器(如果有的話)。 在你的情況 variable=$(.foo);是相當於[<div class="foo"></div>, <div class="foo"></div> /* ... */]

由於您的for循環迭代是返回數組中的DOM元素。您可以重新包裝的元素作爲一個jQuery對象,像這樣:

for(var k=0;k<variable.length;k++){ 
    $(variable[k]).find('ul').doSomethingWithThese 
} 

或者使用$.each遍歷您的收藏:

$.each(variable, function() { 
    $(this).find('ul').doSomethingWithThese 
}); 
0

HTML

<div class="foo"> 
    <ul class='myClass'> 
     <li>list 1-1</li> 
    </ul> 
    <ul> 
     <li>list 1-2</li> 
    </ul> 
    <ul> 
     <li>list 1-3</li> 
    </ul> 
</div> 
<div class="foo"> 
    <ul> 
     <li>list 2-1</li> 
    </ul> 
    <ul class='myClass'> 
     <li>list 2-2</li> 
    </ul> 
    <ul> 
     <li>list 2-3</li> 
    </ul> 
</div> 

的JavaScript

$('.foo ul').each(function(){ 
    if ($(this).hasClass('myClass')){ 
     $(this).css('background-color', 'yellow'); 
    } 
}) 

工作實例

FIDDLE

+0

謝謝,我 想到這裏,這個 「黑客」 解決該問題,但實際上工程;) – wuwutinh