1

我有一个函数来查找查找类的长度,但它不工作总是返回长度为'0';

我的代码有些问题:任何人都可以建议我正确的方法。但我需要使用相同的代码样式结构来实现这一点。

看看我的代码:

<div id='list'>
  <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>      
  </ul>
    <p></p>
</div>​

function callMe(params){
    $(params.list).click(function(){
       $(this).addClass('c_on');
        var length = $(params.list).find('.c_on').length;
        $('p').text(length)// return always 0, even i clicked no.of list.        
    })
}

$(document).ready(function(){
    var obj = {
        list : $('ul').find('li')      
    }
   callMe(obj);
})

style :

li.c_on{
border:1px solid green;
}

​​这里是小提琴:http: //jsfiddle.net/AeGvf/1/

4

4 回答 4

4

您正在使用find

获取当前匹配元素集中每个元素的后代,由选择器、jQuery 对象或元素过滤。

当你应该使用filter

将匹配元素集减少为匹配选择器或通过函数测试的元素。

请注意,它find适用于后代,而filter适用于元素本身。您有一个<li>没有任何后代的 s 列表,因此find正在搜索一个空集。你应该做这个:

var length = $(params.list).filter('.c_on').length;

另外,你params.list已经是一个jQuery对象所以你不需要$(params.list),你可以params.list直接使用:

function callMe(params){
    params.list.click(function(){
        $(this).addClass('c_on');
        var length = params.list.filter('.c_on').length;
        $('p').text(length);
    });
}

演示:http: //jsfiddle.net/ambiguous/uCGaY/

于 2012-05-05T06:34:01.503 回答
0

你的选择方法有点缺陷。改用这个:

function callMe(params){
    params.list.click(function(){
       $(this).addClass('c_on');
        var length = $(this).parent().find('.c_on').length;
        $('p').text(length)        
    })
}

演示

于 2012-05-05T06:31:38.973 回答
0

我发现一个解决方案工作正常:

function callMe(params){
    $(params.list).click(function(){
       $(this).addClass('c_on');
        var length = $(params.list).filter('.c_on').length;//instead find i used filter. works!
        $('p').text(length)        
    })
}

$(document).ready(function(){
    var obj = {
        list : $('ul').find('li')      
    }
   callMe(obj);
})
​

但是直到我想知道为什么 find 方法不起作用?还是有任何限制使用它?还是我做错了..?请回答我任何人的发现。

于 2012-05-05T06:33:40.563 回答
0

以下对我有用。我已经修改了名称,但您调用的是在同一元素中查找类元素,而不是父元素。

<script>
    function callMe(params) {

        $(params).click(function () {
            $(this).addClass('c_on');
            var suspects = $("#list").find('.c_on');

            $('p').text(suspects.length); // return always 0, even i clicked no.of list.        
        });
}

$(document).ready(function () {

    var obj = $('li');

    callMe(obj);
})
</script>
于 2012-05-05T06:47:35.967 回答