javascript - 了解比较值的简单排序脚本

标签 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 如何递增,我浏览了整个脚本,但不太明白 matches 如何分别为第一个和第二个表获取 4 和 2 的值(显示在相应的表为 40 和 20)。我了解 filter 函数的用法,但不太明白 matches 如何获取其值,我知道涉及 length 属性,我在末尾看到它return语句,但还是不太明白匹配是如何递增的?

最佳答案

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

这里它将迭代当前正在迭代的 ol 元素中包含的每个 li

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

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

        }).length;

这里,与之前相同,但使用外部过滤器,以检查找到了多少个。因此,对于第一个,值为 4。

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

关于javascript - 了解比较值的简单排序脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31482835/

相关文章:

javascript - JavaScript<->DOM 循环引用在现代浏览器中安全吗?

javascript - 具有固定标题的水平和垂直可滚动内容

javascript - Jquery Graph 显示引擎状态

javascript - 将函数传递给 Deferred 的构造函数的优点/缺点

javascript - 跨浏览器刷新在 JavaScript 对象中保留值

javascript - 刷新 javascript onclick

javascript - 如何使用 jquery 在数据表中添加数据?

javascript - 删除照片后刷新页面

javascript - Angularjs - 在 ng-repeat 中获取对象

javascript - 通过两个数据属性和排除数据属性获取一个 div