jQuery数据属性单击事件

时间:2012-01-16 23:01:37

标签: jquery

我已经做了一个简单的小提示来概述我的问题:http://jsfiddle.net/mYdxw/

我正在尝试点击div,抓取其数据属性并显示其相应的div组。

有人能说出为什么目前没有这样做吗?

JS

$(document).ready(function() {

    $('.categoryItems').click(function() {
        $('.itemLinks').hide();
        var target_category = $(this).attr('data-target_category');
        $('.itemLinks [data-category=' + target_category + ']').show();
    });
});

HTML

<div id="categories">
    <div data-target_category="html-site-templates" class="categoryItems">HTML Site Templates</div>
    <div data-target_category="jquery-plugins" class="categoryItems">jQuery Plugins</div>
    <div data-target_category="tumblr-themes" class="categoryItems">Tumblr Themes</div>
    <div data-target_category="wordpress-themes" class="categoryItems">WordPress Themes</div>    
</div>

<div id="content">
    <a class="itemLinks" data-category="tumblr-themes" href="/tumblr-themes/mini-tumblr-theme/">Mini Tumblr Theme</a>
    <a class="itemLinks" data-category="jquery-plugins" href="/jquery-plugins/randomr-jquery-plugin/">Randomr jQuery Plugin</a>
    <a class="itemLinks" data-category="wordpress-themes" href="/wordpress-themes/redux-wp-theme/">Redux WP Theme</a>
</div>

2 个答案:

答案 0 :(得分:11)

此...

$('.itemLinks [data-category=' + target_category + ']').show();

应该是这个......

$('.itemLinks[data-category="' + target_category + '"]').show();

空格被解释为后代选择器,但data-category直接位于itemLinks元素上,而不是后代。

我还在属性选择器的值周围添加了引号。 API需要它。

DEMO: http://jsfiddle.net/mYdxw/11/

答案 1 :(得分:11)

为了改进代码,jQuery提供.data()来检索数据集的值,而不是使用attr()使用data()

 var target_category = $(this).data('target_category');

DEMO:http://jsfiddle.net/mYdxw/28/