理解简单的排序脚本,用于比较值

时间:2015-07-17 18:56:27

标签: javascript jquery

我只是在搜索一个简单的jquery排序脚本,并在网上找到了这个:

$(function() {
    $('ol').each(function() {
        var matches = $('li', this).filter(function() { // Each item
            var text = $(this).text();
            return $('ul.three li').filter(function() { // Are there matches in .three?
                return $(this).text() == text;
            }).length > 0;
        }).length;
        $('li:last', this).text((matches * 10) + ' Points');
    });
});

FIDDLE HERE

注意如何将前两个表的值与第三个表的值进行比较。现在我的问题是matches如何递增,我浏览了整个脚本,但是不太清楚第一个和第二个表的匹配值是多少分别为4和2(分别显示在各个表中)表格为40和20)。我理解filter函数的用法,但是我不太清楚匹配是如何得到它的值的,我知道length属性是涉及的,我在return语句的末尾看到它,但仍然不太明白比赛是如何增加的?

1 个答案:

答案 0 :(得分:2)

$(function() {
    $('ol').each(function() {
        var matches = $('li', this).filter(function() { // Each item

这里将遍历当前正在迭代的li元素中包含的每个ol项目

            var text = $(this).text();
            return $('ul.three li').filter(function() { // Are there matches in .three?
                return $(this).text() == text;
            }).length > 0;

如果有任何ul与正在迭代的three文本相同,则会在li中使用类li进行搜索。 filter函数将返回与搜索匹配的每个元素,当然,如果所有文本都不同,它将返回一个元素或不返回任何元素。因此,当它检查它时length > 0正在做的是检查是否至少有一个匹配的元素(也就是说:如果这个文本在.three中。所以如果它返回true,那么我们将上一个过滤器的计数器。

        }).length;

这里,和以前一样,但是使用外部过滤器,来检查找到了多少。因此,对于第一个,值为4.

        $('li:last', this).text((matches * 10) + ' Points');
    });
});