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で機能することに注意してください。子孫を持たない s のリストがあるため、空のセットを検索しています。これを行う必要があります:filter<li>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

以下は私のために働いた。名前を変更しましたが、親ではなく、同じ要素内のクラス要素を検索するために呼び出していました。

<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 に答える
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 に答える