Découvrez notre magazine 2026

E-Shop
logo gresys

Gresy's

Née dans le sud de la France en 2014, GRESY’S réinvente les codes de la
joaillerie traditionnelle en proposant des créations audacieuses : des bijoux
chics et décontractés, où les pierres précieuses, les métaux nobles et des
associations de couleurs inattendues se rencontrent avec modernité.
Chaque bijou est imaginé avec une exigence constante de qualité dans un
esprit minimaliste pour créer des pièces aussi précieuses que faciles à
porter.

document.addEventListener('DOMContentLoaded', function() { makeCollapsible(); // Gestion des popups Elementor (lorsqu'elles s'ouvrent) jQuery(document).on('elementor/popup/show', function(event, id, instance) { if (id) { makeCollapsible(); } }); // Nettoyage des filtres vides et inutiles cleanFilters(); }); // Écouteur d'événement alternatif pour les popups Elementor window.addEventListener('elementor/popup/show', function(event, id, instance) { if (id) { makeCollapsible(); } }); /** * Fonction pour rendre les filtres pliables/dépliables */ function makeCollapsible() { jQuery(function($) { // Pour les checkboxes - masque les listes de cases à cocher non-appliquées avec animation $('.jet-checkboxes-list:not(.collapsible-applied)').slice(0).slideUp( 500, function() { $(this).addClass('collapsible-applied'); } ); // Pour le filtre range - masque les curseurs de plage non-appliqués avec animation $('.jet-range:not(.collapsible-applied)').slice(0).slideUp( 500, function() { $(this).addClass('collapsible-applied'); } ); // Gestionnaire de clic sur les labels de filtre $('.jet-filter-label').off('click').on('click', function(e) { e.stopPropagation(); // Empêche la propagation de l'événement var $clickedLabel = $(this); var $nextElement = $clickedLabel.next(); // Ferme tous les autres filtres ouverts $('.jet-filter-label').not($clickedLabel).each(function() { var $otherLabel = $(this); var $otherContent = $otherLabel.next(); if ($otherContent.is(':visible')) { $otherContent.slideUp(); $otherLabel.removeClass('noicon'); } }); // Bascule l'état du filtre cliqué (ouvert/fermé) $nextElement.slideToggle(); $clickedLabel.toggleClass('noicon'); }); // Ferme les filtres lorsqu'on clique en dehors $(document).on('click', function(e) { if (!$(e.target).closest('.jet-filter').length) { $('.jet-checkboxes-list:visible, .jet-range:visible').slideUp(); $('.jet-filter-label.noicon').removeClass('noicon'); } }); }); } /** * Fonction pour supprimer les filtres vides et inutiles * Utilise jQuery pour s'assurer de la compatibilité et de la précision */ function cleanFilters() { jQuery(function($) { // Logs pour le débogage console.log('Début du nettoyage des filtres'); // Traiter chaque filtre dans le groupe de filtres $('.jet-filters-group .jet-filter').each(function() { var $filter = $(this); var $label = $filter.find('.jet-filter-label'); var filterName = $label.text().trim(); // Cas 1: Filtre qui n'a qu'un label (sans contenu) if ($filter.children().length === 1 && $filter.children().first().hasClass('jet-filter-label')) { console.log('Suppression du filtre vide:', filterName); $filter.remove(); return; // Passe au filtre suivant } // Cas 2: Filtres avec une seule option ou options déjà sélectionnées sans alternatives var $visibleRows = $filter.find('.jet-checkboxes-list__row:not(.jet-filter-row-hide)'); var $checkedInputs = $filter.find('.jet-checkboxes-list__input:checked'); var $uncheckableRows = $filter.find('.jet-checkboxes-list__row:not(.jet-filter-row-hide):not(:has(.jet-checkboxes-list__input:checked))'); // Si nous avons exactement une option cochée et aucune autre option visible non cochée if ($checkedInputs.length === 1 && $uncheckableRows.length === 0) { console.log('Suppression du filtre avec une seule option cochée:', filterName); $filter.remove(); return; } // Si nous avons exactement une option visible au total if ($visibleRows.length === 1) { console.log('Suppression du filtre avec une seule option visible:', filterName); $filter.remove(); return; } }); console.log('Fin du nettoyage des filtres'); }); // Observer les changements dans le DOM pour détecter de nouveaux filtres setupMutationObserver(); } /** * Configure un observateur de mutations pour détecter les nouveaux filtres * ajoutés au DOM après le chargement initial */ function setupMutationObserver() { jQuery(function($) { // Fonction pour nettoyer à nouveau les filtres const reCheckFilters = function() { $('.jet-filters-group .jet-filter').each(function() { var $filter = $(this); // Cas 1: Filtre qui n'a qu'un label (sans contenu) if ($filter.children().length === 1 && $filter.children().first().hasClass('jet-filter-label')) { $filter.remove(); return; } // Cas 2: Filtres avec une seule option ou options déjà sélectionnées sans alternatives var $visibleRows = $filter.find('.jet-checkboxes-list__row:not(.jet-filter-row-hide)'); var $checkedInputs = $filter.find('.jet-checkboxes-list__input:checked'); var $uncheckableRows = $filter.find('.jet-checkboxes-list__row:not(.jet-filter-row-hide):not(:has(.jet-checkboxes-list__input:checked))'); // Si nous avons exactement une option cochée et aucune autre option visible non cochée if ($checkedInputs.length === 1 && $uncheckableRows.length === 0) { $filter.remove(); return; } // Si nous avons exactement une option visible au total if ($visibleRows.length === 1) { $filter.remove(); return; } }); }; // Créer un observateur MutationObserver if (window.MutationObserver) { const observer = new MutationObserver(function(mutations) { let shouldRecheckFilters = false; mutations.forEach(function(mutation) { if (mutation.addedNodes.length > 0) { for (let i = 0; i < mutation.addedNodes.length; i++) { const node = mutation.addedNodes[i]; if (node.nodeType === 1 && ( (node.classList && (node.classList.contains('jet-filter') || node.classList.contains('jet-filters-group'))) || $(node).find('.jet-filter, .jet-filters-group').length )) { shouldRecheckFilters = true; break; } } } }); if (shouldRecheckFilters) { // Attendre un court instant pour que tous les filtres soient correctement rendus setTimeout(reCheckFilters, 150); } }); // Configurer l'observer observer.observe(document.body, { childList: true, subtree: true }); } }); }
Filtrer par
Catégories
Catégories
Genre
Genre
Métal
Métal
Disponibilité
Disponibilité
Prix
Prix - slider
Prix - inputs

120

En stock

120

En stock

110

En stock

120

En stock

280

En stock

120

En stock

250

En stock

120

En stock

130

En stock

110

En stock

90

En stock

200

En stock

110

En stock

250

En stock

120

En stock

110

En stock

120

En stock

170

En stock

220

En stock

110

En stock

120

En stock

130

En stock

200

En stock

120

En stock

130

En stock

280

En stock

150

En stock

280

En stock

170

En stock

180

En stock

Paiement sécurisé

Vos paiements sont effectués en toute sécurité, pour une expérience d’achat simple et sereine.

Satisfait ou remboursé

Parce que votre satisfaction nous tient à cœur, vous disposez de 14 jours pour retourner votre commande en toute simplicité.

Authenticité garantie

Chaque création est soigneusement sélectionnée pour son authenticité, son origine et la qualité de son savoir-faire.

Expédition sous 72h

Vos commandes sont préparées avec soin et expédiées sous 72h.

Rechercher