jQuery - IE返回0个孩子

时间:2010-02-25 09:07:06

标签: jquery internet-explorer children

我使用以下命令快速为脚本创建了此函数:

$.fn.liCount = function(){
    var i=0;
    $(this).children().each(function(){
        i++;
    });
    return Number(i);
}

问题是IE返回0,有谁知道为什么?

alert( $("ul").liCount() );

编辑:

<div id="prev-quotes">
    <ul id="quote-list">
        <li id="quote_content_wrapper" >
            <ul>
                <li class="quote_li">
                    <span class="service_quote"><a href="#">Web Design Services</a></span>
                    <br>
                    <span class="cost_quote"><strong>£192</strong> - <a id="7" href="#">delete</a> | <a id="7" href="#">view</a></span>
                </li>
                <li class="quote_li">
                    <span class="service_quote"><a href="#">Web Design Services</a></span>
                    <br>
                    <span class="cost_quote"><strong>£192</strong> - <a id="7" href="#">delete</a> | <a id="7" href="#">view</a></span>
                </li>
                <li class="quote_li">
                    <span class="service_quote"><a href="#">Web Design Services</a></span>
                    <br>
                    <span class="cost_quote"><strong>£192</strong> - <a id="7" href="#">delete</a> | <a id="7" href="#">view</a></span>
                </li>
            </ul>
        </li>
        <li>
            <a id="first-quote" href="#">Previous Quotes</a>
            <img height="16" width="16" id="warning" src="images/for_web/check_mark.png">
        </li>
    </ul>    
</div>

3 个答案:

答案 0 :(得分:1)

您只需使用

即可
$("ul > li").length;

参见 Child Selector (“parent > child”)

如果您想获得身份li ulquote-list的号码,可以使用

$("#quote-list > li").length;

如果你想获得带有类名quote_li的li的数量,你可以使用

$("#quote-list > li > ul > li.quote_li").length;

答案 1 :(得分:0)

当您确定return Number(i);是一个数字时,无需使用i

你根本不需要计数器var - jQuery中有.length

为什么不直接使用以下内容:

$.fn.liCount = function() {
 return $(this).children('li').length;
};

它更短,更快,更具可读性,it works in all browsers

然而,为此编写'插件'似乎有点冗长/不必要。你可以使用类似的东西:

$('ul > li').length;

答案 2 :(得分:0)

在IE 7和8中,您需要识别子标记

$.fn.liCount = function(){
    var i=0;
    $(this).children("li").each(function(){
        i++;
    });
    return Number(i);
}

会奏效。当然这限制了方法的使用,除非你传递你希望计算的元素......

    $.fn.liCount = function(elem){
        var i=0;
        $(this).children(elem).each(function(){
            i++;
        });
        return Number(i);
   }

然后致电

alert($(“ul”)。liCount(“li”));