1

コメントのリストがあり、それぞれに投票数 (賛成または反対) があります。上位 2 つのコメント (投票数ではなく、正味の最高票数に基づく) を取り出し、それらの HTML をコピーして、「上位のアイデア」というタイトルの新しいセクションに追加しようとしています。

2つのコメントの中で最も数字が大きいコメント全体を複製したい

HTML (過度に簡略化されたバージョン)...これはコメントごとに繰り返されます:

<div class="comment">
    <div class="thumbblock">
        <div class="ratingtext">
            <div>
                <span class="num-total" data-voteup="8" data-votedown="4">+4</span>
            </div><!-- END random div -->
        </div><!-- END ratingtext -->
    </div><!-- END thumbblock -->
    <p>comment text</p>
</div><!-- END comment -->

jQuery:

jQuery(document).ready(function($) {
    //number of top comments to show
    var showResults = 2;

    //loop through each total rating
    //only pull the top two (in this case)
    $('span.num-total').slice(0, showResults).each(function(index){

        //calculate the net vote total based on data-voteup and data-votedown
        var upVotes = $(this).data('voteup');
        var downVotes = $(this).data('votedown');
        var netVotes = upVotes - downVotes;

        //get the HTML for those comments
        var commentHTML = $(this).parents('.comment').html();

        //append that HTML to the top comment div
        $('div.top-comments').append('<div class="comment">' + commentHTML + '</div>');

    });
});

ここでライブ コピーを参照してください: http://jobelty.com/company/apple
jQuery は、top-comments.js というファイルから取得されます。

4

3 に答える 3

1

並べ替える前にリストを切り詰めているので、せいぜい、たまたま一番上にある 2 つのコメントのテキストを取得するだけです。

最高ランクの 2 つのコメントの完全なコメント要素を取得し、それらを にコピーするバージョン.top-comments:

jQuery(document).ready(function ($) {
    //number of top comments to show
    var showResults = 2;

    var ordered = [];

    // grab all the comments
    var comments = $('.commentlist .comment');

    $.each(comments,

    function (i, v) {
        // for each comment
        var cmt = $(v);
        var nums = cmt.find('.num-total');
        var upVotes = nums.data('voteup');
        var downVotes = nums.data('votedown');
        var netVotes = upVotes - downVotes;

        var pos = ordered.length;

        // find the first place in the ordered list it fits
        for (var j = 0; j < ordered.length; ++j) {
            if (ordered[j].votes < netVotes) {
                pos = j;
                break;
            }
        }

        // save element and count for later
        var vote = {
            'votes': netVotes,
            'cmt': cmt
        };

        ordered[pos] = vote;
    });

    var n = Math.min(2, ordered.length);

    // grab the first (up to) 2 and append to .top-comments    
    for (var i = 0; i < n; ++i) {
        ordered[i].cmt.clone().appendTo($('.top-comments'));
    }
});
于 2013-05-01T01:43:45.990 に答える
0

私が言えることは、上位 2 つのコメントが何であるかを判断する部分を除いて、すべてが機能していることです。最初にコメント要素をソートすることに基づくアプローチを次に示します。コードはテストされていません:

jQuery(document).ready(function($) {
    //number of top comments to show
    var showResults = 2;

    var netVotes = function(domElm) {          
        var upVotes = domElm.data('voteup');
        var downVotes = domElm.data('votedown');
        return upVotes - downVotes;
    };

    var sortedComments = $('span.num-total').slice(0).sort(function(a,b) {
        return netVotes(a) - netVotes(b);
    });

    sortedComments.slice(0, showResults).each(function(index){
        var commentHTML = $(this).parents('.comment').html();
        $('div.top-comments').append('<div class="comment">' + commentHTML + '</div>');
    });
});
于 2013-05-01T01:44:08.943 に答える