quiero obtener el atributo de datos en el segundo nivel
$('.filter-select').each(function() { console.log($(this).data()) // this gives me all data $(this).on('change', function() { console.log($(this).data()) // but here gives me only on that i clicked i want it all }) })Simplemente puede:
$('.filter-select').each(function() { const allData = $(this).data(); $(this).on('change', function() { // use allData to access all }) })En lugar de usar each , y luego tratar de adjuntar detectores de eventos a cada elemento .filter-select , use la delegación de eventos para adjuntar un detector a un elemento principal para que capture los eventos de cambio de todos los elementos .filter-select medida que "burbujean". "el DOM.
$(document).on('change', '.filter-selector', handleChange); function handleChange() { console.log($(this).data()); } <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <select data-id="1" class="filter-selector"> <option selected>Choose (id: 1)</option> <option value="1">1</option> <option value="2">2</option> </select> <select data-id="2" class="filter-selector"> <option selected>Choose (id: 2)</option> <option value="1">1</option> <option value="2">2</option> </select>