jQuery找到里面的选择器

时间:2015-01-03 18:29:03

标签: javascript jquery

通过div循环,我想写一个选择器来获取uls,并为每个人做一些事情。

我的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&gt; ul”)一样,即使我能理解为什么我的其他尝试失败。

我在过去3小时内尝试过每一个可以想象的变体,包括: 使用children()代替find(),使用get(0)insted [0],使用get(0)或[0]之后('ul')(至少尝试获得第一个ul),
使用$ variable,$。(变量),($。('ul')),($('ul')),使用each()而不是for循环,为所有东西创建变量, 所有上述所有可能的组合,google,stackoverflow,api.jquery.com ...

比我尝试更简化:

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

以及所有变种,但仍然没有运气......

6 个答案:

答案 0 :(得分:2)

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

有关jQuery each()函数的详细用法,请参阅here

答案 1 :(得分: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); 
});

答案 2 :(得分:0)

使用variable.each http://api.jquery.com/jquery.each/迭代第一个选择器返回的项目。您还需要将.foo更改为'.foo'

答案 3 :(得分:0)

当您使用variable[k]variable.get(k)与JQuery对象时,它将为您提供底层DOM对象而不是jQuery对象。您可以使用.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 Loop

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
});

答案 4 :(得分:0)

jQuery返回一个像object这样的数组,它包含与你的选择器匹配的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
});

答案 5 :(得分: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