我有一个小的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');
});
}
非常感谢任何帮助/指示!
答案 0 :(得分:1)
您需要id选择器#
和id(控制)
更改
$(control)
到
$('#'+control);
答案 1 :(得分:1)
只需更改您的代码:
var control = $('.control ul').attr('id');
到此:
var control = '#' + $('.control ul').attr('id');
此外,您不必在此处使用每个循环,因为 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');
});
});
答案 2 :(得分: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');
});
答案 3 :(得分: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');
});
不确定我是否犯了错误转换,但想法是:)