0

我搜索了 hi 和 low 并且在盯着这个代码库的其余部分看了太多小时之后,这个看似简单的函数的答案让我望而却步。

HTML如下:

<a class="element-link local" data-category="local">
    <img src="http://placehold.it/48x48/eee/eee.png"  class="logo" alt="" />
</a>
<a class="element-link local" data-category="local">
    <img src="http://placehold.it/48x48/eee/eee.png"  class="logo" alt="" />
</a>
<a class="element-link news" data-category="news">
    <img src="http://placehold.it/48x48/eee/eee.png"  class="logo" alt="" />
</a>
<a class="element-link news" data-category="news">
    <img src="http://placehold.it/48x48/eee/eee.png"  class="logo" alt="" />
</a>
<a class="element-link business" data-category="business">
    <img src="http://placehold.it/48x48/eee/eee.png"  class="logo" alt="" />
</a>
<a class="element-link business" data-category="business">
    <img src="http://placehold.it/48x48/eee/eee.png"  class="logo" alt="" />
</a>
<a class="element-link business" data-category="business">
    <img src="http://placehold.it/48x48/eee/eee.png"  class="logo" alt="" />
</a>
<a class="element-link business" data-category="business">
    <img src="http://placehold.it/48x48/eee/eee.png"  class="logo" alt="" />
</a>

我要做的是针对每个类别的第一个孩子,并为其添加一个类。因此,FIRST 新闻、商业等(针对每个类别)将添加一个类。例如,这是我拥有的 JS:

$container.find('.element-link').each(function(){
    var category = $(this).data('category'); 
    $(this).hasClass(category).first().addClass('new');
});

我尝试了 :first, :first-child, :eq(1) 的各种迭代,但无济于事。而且我没喝咖啡了。

任何帮助是极大的赞赏!谢谢。

4

3 回答 3

2

hasClass返回trueor false,因此您不能将其进一步链接到.first().

这么说,您应该缓存所有链接,然后过滤它们:

var $links = $container.find('.element-link');

$links.each(function(){
    var category = $(this).data('category'); 
    $links.find('.' + category).first().addClass('new');
});
于 2013-04-30T23:45:19.230 回答
1

这是实现它的另一种方式

        //get all unique "category" values
        var cats = $.unique($('a.element-link').map(function(){
           return $(this).data('category')
        }).get());

        //add classes to first element of each "category"
        for (var x =0; x < cats.length; x++){
           $('a.element-link[data-category="'+cats[x]+'"]:first').addClass('new');
        }
于 2013-04-30T23:51:49.630 回答
-1

也许我的代码不好,但应该可以工作。

var oldCategory = '';
$container.find('.element-link').each(function(){
    var category = $(this).data('category');
    if(oldCategory != category)
        $(category).addClass('new');
    oldCategory = category;
});
于 2013-04-30T23:45:30.307 回答