0

我有一个小的 jquery 函数,可以根据选择的内容显示和隐藏,我有 2 个在同一页面上运行,但每个都有自己的数据附加到选择中,我想知道如何整理下面的函数- 我是否会通过使用 .attr 函数找出 id 来为 #rearq / #rearw 创建一个变量,然后为每件事使用某种类型?

$('#rearw li a').click(function(ev){
        ev.preventDefault();
        var id = $(this).data('id');
        $('#rearw li a').not($(this).toggleClass('selected')).removeClass('selected');
        $('#rearw-tints li').not($('#'+id).toggleClass('shown')).removeClass('shown');
    });
    $('#rearq li a').click(function(ev){
        ev.preventDefault();
        var id = $(this).data('id');
        $('#rearq li a').not($(this).toggleClass('selected')).removeClass('selected');
        $('#rearq-tints li').not($('#'+id).toggleClass('shown')).removeClass('shown');
    });

这是我到目前为止所拥有的:

var control = $('.control ul').attr('id'); // Get the id e.g #rearw / #rearq

$(control).each(function (index) {
    $(control + ' li a').click(function (ev) {
        ev.preventDefault();
        var id = $(this).data('id');
        $(control + ' li a').not($(this).toggleClass('selected')).removeClass('selected');
        $(control + '-tints li').not($('#' + id).toggleClass('shown')).removeClass('shown');
    });
}  

非常感谢任何帮助/指针!

4

4 回答 4

1

只需更改您的代码:

var control = $('.control ul').attr('id');

对此:

var control = '#' + $('.control ul').attr('id');

此外,您不必在此处使用 each 循环,因为ID在 DOM 中应该是唯一的。因此,您可以删除它并使用如下代码:

$(control + ' li a').click(function (ev) {
    ev.preventDefault();
    var id = $(this).data('id');
    $(control + ' li a').not($(this).toggleClass('selected')).removeClass('selected');
    $(control + '-tints li').not($('#' + id).toggleClass('shown')).removeClass('shown');
});

更新

你的代码

var control = $('.control ul').attr('id');

只会给你一个 ID,因此你可以这样做,相同的逻辑但稍作修改:

$('.control ul').each(function () {
    var control = '#' + this.id;

    $(control + ' li a').click(function (ev) {
        ev.preventDefault();
        var id = $(this).data('id');
        $(control + ' li a').not($(this).toggleClass('selected')).removeClass('selected');
        $(control + '-tints li').not($('#' + id).toggleClass('shown')).removeClass('shown');
    });
});
于 2013-09-06T11:44:35.020 回答
1

您需要 id 选择器#和 id(control)

改变

$(control) 

$('#'+control);
于 2013-09-06T11:38:57.300 回答
1
$('#rearw li a, #rearq li a').click(function(ev){
    ev.preventDefault();
    var id = $(this).data('id'), 
        parent = $(this).closest('ul'), // assuming #rearw and #rearq are <ul> elements
        parentId = parent.attr('id'); // get 'rearw' or 'rearq'
    parent.find('a').not($(this).toggleClass('selected')).removeClass('selected');
    $('#' + parentId +'-tints li').not($('#'+id).toggleClass('shown')).removeClass('shown');
});
于 2013-09-06T11:45:57.923 回答
0

沿着线的东西怎么样:

$('#rearw li a, #rearq li a').click(function(ev){
     ev.preventDefault();
     var id = $(this).attr('id');
     $(this).closest('#rearw, #rearq').find('li a').not($(this).toggleClass('selected')).removeClass('selected');
     $(id + '-tints li').not($('#'+id).toggleClass('shown')).removeClass('shown');
});

不确定我是否在转换时犯了错误,但这个想法就在那里:)

于 2013-09-06T11:53:49.093 回答