2

.is(':visible')在 jquery 中使用方法,但它没有按预期工作。

这是我的代码片段

我在那里错过了什么?

HTML:

<div class="str">

    <ul><li>1</li><li><a href="#">hide</a></li></ul>
    <ul><li>2</li><li><a href="#">hide</a></li></ul>
    <ul><li>3</li><li><a href="#">hide</a></li></ul>
    <ul><li>4</li><li><a href="#">hide</a></li></ul>
    <ul><li>5</li><li><a href="#">hide</a></li></ul>
    <ul><li>6</li><li><a href="#">hide</a></li></ul>

    <div class="length"></div>

</div>

jQuery:

$(function(){

    $('.str ul').find('a').live('click',function(){
       $(this).closest('li').parent().hide();
       var ll= $('.str').find('ul').each(function(){  
           $('.length').text( $('.str').find('ul').is(':visible').length );  
        });   
    });

});
4

4 回答 4

6

采用:$('.str').find('ul:visible').length

jsFiddle 演示

$(function(){
    
    $('.str ul').on('click','a',function(){    
       $(this).closest('li').parent().hide();
        
       var visibleUL = $('.str').find('ul:visible').length;      
       $('.length').text( visibleUL );        
       alert(visibleUL );
        
    });
    
});

虽然返回一个布尔.is()true / false:visiblelength

于 2012-08-20T08:39:54.887 回答
4

.is()方法返回truefalse

文档

与其他过滤方法不同,.is() 不会创建新的 jQuery 对象。

您应该使用find()filter()不使用is().

于 2012-08-20T08:38:36.790 回答
1

is(':visible')返回一个布尔值,而不是一个 jQuery 对象:

// Wrong
if ($selector.is(':visible').length) {

// Right
if ($selector.is(':visible')) {
于 2012-08-20T08:38:47.553 回答
1

我会将那个奇怪的 HTML 更改为一个实际的列表,而不是一堆每个都有一个项目的列表:

<div class="str">
    <ul>
        <li>1<br><a href="#">hide</a></li>
        <li>2<br><a href="#">hide</a></li>
        <li>3<br><a href="#">hide</a></li>
        <li>4<br><a href="#">hide</a></li>
        <li>5<br><a href="#">hide</a></li>
        <li>6<br><a href="#">hide</a></li>
    </ul>
    <div class="length"></div>
</div>​

然后做:

$(function() {
    $('a', '.str ul').on('click', function() {
        $(this).closest('li').hide();
        $('.length').text($('.str ul li:visible').length);
    });
})​;​

小提琴

于 2012-08-20T08:47:19.260 回答