微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – jQuery,foreach div in ul

我如何在jQuery中做foreach或类似的东西?我需要在用户点击< span>时将该类添加到所有< div> s,并在< ul>中使用投票活动类.

我尝试过.each方法,但它不起作用.

我有这个HTML

<ul class="suggestions inactive">
    <li id="s2">
        <div class="id">2</div>
        <div class="Vote inactive">
            <span class="up"></span>
            <span class="down"></span>
        </div>
        <div class="text">test2</div>
        <div class="rating">2</div>
    </li>
    <li id="s3">
        <div class="id">3</div>
        <div class="Vote active">
            <span class="up"></span>
            <span class="down"></span>
        </div>
        <div class="text">test3</div>
        <div class="rating">0</div>
    </li>
</ul>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="script.js"></script>

这个脚本:

            $(document).ready(function(){

                var ul = $('ul.suggestions');

                // Listening of a click on a UP or DOWN arrow:

                $('div.Vote span').live('click',function(){

                    var elem        = $(this),
                        parent      = elem.parent(),
                        li          = elem.closest('li'),
                        ratingDiv   = li.find('.rating'),
                        id          = li.attr('id').replace('s',''),
                        v           = 1,
                        ul2         = elem.closest('li').parent();

                    // If the user's already Voted:
                    if(parent.hasClass('inactive')){
                        return false;
                    }
                    if(ul2.hasClass('inactive')){           
                        return false;
                    }

                    //If the user's already Voted, add following class
                    parent.removeClass('active').addClass('inactive');                                  
                    ul2.removeClass('active').addClass('inactive');


                    if(elem.hasClass('down')){
                        v = -1;
                    }

                    // Incrementing the counter on the right:
                    ratingDiv.text(v + +ratingDiv.text());

                    // Turning all the LI elements into an array
                    // and sorting it on the number of Votes:

                    var arr = $.makeArray(ul.find('li')).sort(function(l,r){
                        return +$('.rating',r).text() - +$('.rating',l).text();
                    });

                    // Adding the sorted LIs to the UL
                    ul.html(arr);

                    // Sending an AJAX request
                    $.get('ajax.PHP',{action:'Vote',Vote:v,'id':id});
                });

解决方法:

你根本不需要.each().

为什么?因为jQuery的选择器奇妙地选择了单个选择器类型的所有内容. $(‘p’)选择HTML中的每个p.

你应该用

$(this).parent().addClass('active').removeClass('inactive');`

来自范围内

$('div.Vote span').live('click',function() { ... } );

另外,请记住.live()在jQuery 1.7中已弃用.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐