jQuery - IE возвращает 0 детей - PullRequest
1 голос
/ 25 февраля 2010

Я быстро сделал эту функцию для сценария, который я использую:

$.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 ]

1 голос
/ 25 февраля 2010

Вы можете просто использовать

$("ul > li").length;

См. Выбор ребенка («родитель> ребенок»)

Если вы хотите получить число li внутри ul с идентификатором quote-list, вы можете использовать

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

Если вы хотите получить число li с именами классов quote_li, вы можете использовать

$("#quote-list > li > ul > li.quote_li").length;
0 голосов
/ 16 августа 2011

В 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"));

0 голосов
/ 25 февраля 2010

Нет необходимости использовать return Number(i);, когда вы уверены, что i - это число.

Вам даже не нужен счетчик var - в jQuery есть .length.

Почему бы просто не использовать следующее:

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

Он короче, быстрее, удобочитаемее и работает во всех браузерах .

Однако, для этого кажется немного многословным / ненужным писать «плагин». Вы можете просто использовать что-то вроде:

$('ul > li').length;
...