我有一个函数可以找到找到类的长度,但它不起作用总是返回长度是' 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;
}
答案 0 :(得分:4)
您正在使用find
:
获取当前匹配元素集中每个元素的后代,由选择器,jQuery对象或元素过滤。
何时使用filter
:
将匹配元素集合减少到与选择器匹配的元素或通过函数测试。
请注意,find
适用于后代,而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);
});
}
答案 1 :(得分:0)
您的选择方法有点缺陷。改为使用这个:
function callMe(params){
params.list.click(function(){
$(this).addClass('c_on');
var length = $(this).parent().find('.c_on').length;
$('p').text(length)
})
}
答案 2 :(得分: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方法不起作用?或者是否有任何限制使用它?或者我的方式是错的..?请回答我找到的任何人。
答案 3 :(得分: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>