如何选择嵌套了两个.each()函数的多个元素?

时间:2012-08-09 19:45:15

标签: javascript jquery

好的,正如所承诺的,这是真正的交易,首先是样本html:

<li data-foo="bar">
    <span id="a"></span>
    <ul>
        <li>
            <span id="1"></span>
            <ul>
                <li>
                    <span id="b"></span>
                </li>
            </ul>   
        </li>

        <li>
            <span id="2"></span>
            <ul>
                <li>
                    <span id="c"></span>
                </li>
            </ul>   
        </li>

    </ul>

</li>

<li data-foo="bar">
    <span id="d"></span>
    <ul>
        <li>
            <span id="3"></span>
            <ul>
                <li>
                    <span id="e"></span>
                </li>
            </ul>   
        </li>

        <li>
            <span id="4"></span>
            <ul>
                <li>
                    <span id="f"></span>
                </li>
            </ul>   
        </li>

    </ul>

</li>

我想让窗口弹出“12”,然后弹出“34” ...所以这是我的嵌套函数尝试:

<script>
    var poptext = "";

    $('li[data-foo=bar]').each(

    function () {

        $(this li span).each(function () {
            poptext = poptext + $(this).attr("id");
        }

        alert(poptext);
        poptext = "";

        );

    }

    );
</script>

这似乎没有用,我认为Jquery可能会混淆多个“this”关键字?此外,对于那些跨度的选择器可能存在问题。

谢谢你们!

3 个答案:

答案 0 :(得分:1)

您的代码中存在语法错误,$(this li span)也应该是$('li span', this)您的逻辑关闭,您没有过滤掉带有字母ID的跨度。

答案 1 :(得分:1)

我认为您正在寻找直接后代选择器:>

像这样使用:

$('li[data-foo=bar]').each(function () {
     var poptext = "";        
     $(this).find('> ul > li > span').each(function () {
         poptext = poptext + $(this).attr("id");
     });
     alert(poptext);
});

只会在左侧选择前一个表达式的直接子节点。

更详细,但也许可读的版本可能是:

$(this).children('ul').children('li').children('span') // selects the same 

在此处查看此行动:http://jsfiddle.net/xYgJg/

答案 2 :(得分:0)

此行有语法错误:

$(this li span).each(function () {

“this”是“each”循环中的当前dom元素,因此一种方法是将它包装在jQuery对象中并调用“.find()”并传入另一个选择器以获取所需的嵌套元素

获得您正在寻找的答案的逻辑也是错误的。我不知道你到底想要找到什么,但这里有一种方法可以得到你想要的答案

var poptext = "",
    id;

$('li[data-foo=bar]').each(function () {
    $(this).find('li span').each(function () {
        id = $(this).attr("id");
        if (!isNaN(id)){
            poptext = poptext + $(this).attr("id");
        }
    });

    alert(poptext);
    poptext = "";

});

这里有一个jsfiddle:http://jsfiddle.net/kEjt7/1/