jQuery 将同一按钮上的 add/remove 切换到列表
jQuery Toggle add/remove on same button to a list
我正在尝试使用相同的按钮创建一种切换/添加和删除。目前我可以将选择添加到列表中,但我希望能够在添加后按相同的按钮将其从列表中删除。
我创建了一个 fiddle 来展示我当前正在进行的工作...
FIDDLE http://jsfiddle.net/amesy/vtg6nnce/2/
HTML...
<ul class="cbp-rfgrid biscuits clearfix">
<li><button type="button" data-biscuit="custardcream" class="biscuit custardcream"><img src="img/custardcream.png" /><div class="overlay"><div class="name">Custard Creams</div><img src="img/bite.png" class="bite" /></div></button></li>
<li><button type="button" data-biscuit="jammydodger" class="biscuit jammydodger"><img src="img/jammydodger.png" /><div class="overlay"><div class="name">Jammy Dodger</div><img src="img/bite.png" class="bite" /></div></button></li>
<li><button type="button" data-biscuit="hobnob" class="biscuit hobnob"><img src="img/hobnob.png" /><div class="overlay"><div class="name">Hobnob</div><img src="img/bite.png" class="bite" /></div></button></li>
</ul>
<div class="barrel"></div> //Basket List / Biscuit Barrel
jQuery...
$(function() {
$('.biscuit').click(function(){
$(this).toggleClass( "selected");
});
});
var barrel_items = [];
$('[data-biscuit]').click(function(){
var biscuit = $(this).data('biscuit');
add_to_barrel(biscuit);
});
function add_to_barrel(item){
if($.inArray(item, barrel_items) !== -1){
return;
}
var name = '';
switch(item){
case 'custardcream':
name = 'Custard Creams';
break;
case 'hobnob':
name = 'Hobnob';
break;
case 'jammydodger':
name = 'Jammy Dodgers';
break;
}
$('.barrel').append('<div class="chosen">' + name + '</div>');
barrel_items.push(item);
}
由于 barrel_items 数组中的元素映射到篮子列表中的元素,您可以从数组中获取元素的索引并使用它从 DOM 结构中删除相应的元素。
JS:
$(function () {
$('.biscuit').click(function () {
$(this).toggleClass("selected");
});
});
var barrel_items = [];
$('[data-biscuit]').click(function () {
var biscuit = $(this).data('biscuit');
add_to_barrel(biscuit);
});
function add_to_barrel(item) {
var name = '';
switch (item) {
case 'custardcream':
name = 'Custard Creams';
break;
case 'hobnob':
name = 'Hobnob';
break;
case 'jammydodger':
name = 'Jammy Dodgers';
break;
}
// If item is already there in array, it's index will be returned,
// otherwise inArray() will return -1
var indexOfItem = $.inArray(item, barrel_items);
if (indexOfItem !== -1) {
$('.barrel .chosen').eq(indexOfItem).remove();
barrel_items.splice(indexOfItem, 1);
}
else {
$('.barrel').append('<div class="chosen">' + name + '</div>');
barrel_items.push(item);
}
}
JSFiddle:http://jsfiddle.net/vtg6nnce/12/
将名称属性添加到您的按钮,例如:
<li><button type="button" data-biscuit="custardcream" name="Custard Creams" class="biscuit custardcream"><img src="img/custardcream.png" /><div class="overlay"><div class="name">Custard Creams</div><img src="img/bite.png" class="bite" /></div></button></li>
并将 onclick 事件更改为:
$('[data-biscuit]').click(function(){
var biscuit = $(this).data('biscuit');
var biscuitName = $(this).attr('name');
if($('div[name="'+biscuitName+'"]').is(":visible")){
$('div[name="'+biscuitName+'"]').hide();
}else{
$('div[name="'+biscuitName+'"]').show();
}
add_to_barrel(biscuit);
});
如果您保留一个简单的地图,这会容易得多,它包含名称和状态,因此很容易切换
$(function () {
var name_map = {
'custardcream' : {name : 'Custard Creams', active : false},
'hobnob' : {name : 'Hobnob', active : false},
'jammydodger' : {name : 'Jammy Dodgers', active : false}
}
$('.biscuit').on('click', function () {
$(this).toggleClass("selected");
var key = $(this).data('biscuit');
var biscuit = name_map[key];
if ( biscuit.active ) {
$('.barrel').find('.' + key).remove();
} else {
var el = $('<div />', {'class' : 'chosen ' + key, text : biscuit.name});
$('.barrel').append(el);
}
biscuit.active = !biscuit.active;
});
});
我正在尝试使用相同的按钮创建一种切换/添加和删除。目前我可以将选择添加到列表中,但我希望能够在添加后按相同的按钮将其从列表中删除。
我创建了一个 fiddle 来展示我当前正在进行的工作...
FIDDLE http://jsfiddle.net/amesy/vtg6nnce/2/
HTML...
<ul class="cbp-rfgrid biscuits clearfix">
<li><button type="button" data-biscuit="custardcream" class="biscuit custardcream"><img src="img/custardcream.png" /><div class="overlay"><div class="name">Custard Creams</div><img src="img/bite.png" class="bite" /></div></button></li>
<li><button type="button" data-biscuit="jammydodger" class="biscuit jammydodger"><img src="img/jammydodger.png" /><div class="overlay"><div class="name">Jammy Dodger</div><img src="img/bite.png" class="bite" /></div></button></li>
<li><button type="button" data-biscuit="hobnob" class="biscuit hobnob"><img src="img/hobnob.png" /><div class="overlay"><div class="name">Hobnob</div><img src="img/bite.png" class="bite" /></div></button></li>
</ul>
<div class="barrel"></div> //Basket List / Biscuit Barrel
jQuery...
$(function() {
$('.biscuit').click(function(){
$(this).toggleClass( "selected");
});
});
var barrel_items = [];
$('[data-biscuit]').click(function(){
var biscuit = $(this).data('biscuit');
add_to_barrel(biscuit);
});
function add_to_barrel(item){
if($.inArray(item, barrel_items) !== -1){
return;
}
var name = '';
switch(item){
case 'custardcream':
name = 'Custard Creams';
break;
case 'hobnob':
name = 'Hobnob';
break;
case 'jammydodger':
name = 'Jammy Dodgers';
break;
}
$('.barrel').append('<div class="chosen">' + name + '</div>');
barrel_items.push(item);
}
由于 barrel_items 数组中的元素映射到篮子列表中的元素,您可以从数组中获取元素的索引并使用它从 DOM 结构中删除相应的元素。
JS:
$(function () {
$('.biscuit').click(function () {
$(this).toggleClass("selected");
});
});
var barrel_items = [];
$('[data-biscuit]').click(function () {
var biscuit = $(this).data('biscuit');
add_to_barrel(biscuit);
});
function add_to_barrel(item) {
var name = '';
switch (item) {
case 'custardcream':
name = 'Custard Creams';
break;
case 'hobnob':
name = 'Hobnob';
break;
case 'jammydodger':
name = 'Jammy Dodgers';
break;
}
// If item is already there in array, it's index will be returned,
// otherwise inArray() will return -1
var indexOfItem = $.inArray(item, barrel_items);
if (indexOfItem !== -1) {
$('.barrel .chosen').eq(indexOfItem).remove();
barrel_items.splice(indexOfItem, 1);
}
else {
$('.barrel').append('<div class="chosen">' + name + '</div>');
barrel_items.push(item);
}
}
JSFiddle:http://jsfiddle.net/vtg6nnce/12/
将名称属性添加到您的按钮,例如:
<li><button type="button" data-biscuit="custardcream" name="Custard Creams" class="biscuit custardcream"><img src="img/custardcream.png" /><div class="overlay"><div class="name">Custard Creams</div><img src="img/bite.png" class="bite" /></div></button></li>
并将 onclick 事件更改为:
$('[data-biscuit]').click(function(){
var biscuit = $(this).data('biscuit');
var biscuitName = $(this).attr('name');
if($('div[name="'+biscuitName+'"]').is(":visible")){
$('div[name="'+biscuitName+'"]').hide();
}else{
$('div[name="'+biscuitName+'"]').show();
}
add_to_barrel(biscuit);
});
如果您保留一个简单的地图,这会容易得多,它包含名称和状态,因此很容易切换
$(function () {
var name_map = {
'custardcream' : {name : 'Custard Creams', active : false},
'hobnob' : {name : 'Hobnob', active : false},
'jammydodger' : {name : 'Jammy Dodgers', active : false}
}
$('.biscuit').on('click', function () {
$(this).toggleClass("selected");
var key = $(this).data('biscuit');
var biscuit = name_map[key];
if ( biscuit.active ) {
$('.barrel').find('.' + key).remove();
} else {
var el = $('<div />', {'class' : 'chosen ' + key, text : biscuit.name});
$('.barrel').append(el);
}
biscuit.active = !biscuit.active;
});
});