JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<a href="#" class="favorite add_fav" data-id="1">お気に入りに追加</a><br>
<a href="#" class="favorite add_fav" data-id="2">お気に入りに追加</a><br>
<a href="#" class="favorite add_fav" data-id="3">お気に入りに追加</a><br>
JavaScript
$(function(){
$(".favorite").on('click', function(){
if ($(this).hasClass("add_fav")) {
addFavorite( $(this).data('id'));
elementLookFavorite(this, true);
} else {
deleteFavorite( $(this).data('id'));
elementLookFavorite(this, false);
}
return false;
});
var elementLookFavorite = function(targetElement, isfavorite) {
if (isfavorite) {
$(targetElement).text("お気に入り解除");
$(targetElement).toggleClass('add_fav', false);
} else {
$(targetElement).text("お気に入りに追加");
$(targetElement).toggleClass('add_fav', true);
}
};
var addFavorite = function(id) {
var fav = loadCookieFavorite();
if (fav.indexOf(String(id)) === -1) {
fav.push(id);
saveCookieFavorite(fav);
} else {
window.alert('すでにお気に入りに入っています');
}
};
var deleteFavorite = function(id) {
var fav = loadCookieFavorite();
var idx = fav.indexOf(String(id));
if (idx !== -1) {
fav.splice(idx, 1);
saveCookieFavorite(fav);
}
};
var saveCookieFavorite = function(favArr) {
document.cookie = "favorite=" + favArr.join('/');
};
var loadCookieFavorite = function() {
var cookies = document.cookie.split(';')
for (idx in cookies) {
if ( ! cookies.hasOwnProperty(idx)) {
continue;
}
if (cookies[idx].indexOf('favorite=') == 0) {
var favStr = cookies[idx].substr('favorite='.length);
return (favStr.length==0) ? [] : favStr.split('/');
}
}
return [];
};
// 初期表示はPHPでやる想定なのでここから下は必要ない
(function(){
var fav = loadCookieFavorite();
$('.favorite').each(function(){
if (fav.indexOf( String($(this).data('id')) ) !== -1) {
// お気に入り中
elementLookFavorite(this, true);
} else {
// お気に入りじゃない
elementLookFavorite(this, false);
}
});
})();
});