Il n'est pas nécessaire d'avoir recours à une grande bibliothèque comme jQuery pour accomplir cette tâche, si vous ne le souhaitez pas. Pour réaliser cela avec la manipulation intégrée du DOM, obtenez une collection de l'élément li
dans un tableau, et au moment du clic, vérifiez les éléments suivants indexOf
l'élément cliqué dans ce tableau.
const lis = [...document.querySelectorAll('#wizard > li')];
lis.forEach((li) => {
li.addEventListener('click', () => {
const index = lis.indexOf(li);
console.log(index);
});
});
<ul id="wizard">
<li>Step 1</li>
<li>Step 2</li>
</ul>
Ou, avec la délégation d'événements :
const lis = [...document.querySelectorAll('#wizard li')];
document.querySelector('#wizard').addEventListener('click', ({ target }) => {
// Make sure the clicked element is a <li> which is a child of wizard:
if (!target.matches('#wizard > li')) return;
const index = lis.indexOf(target);
console.log(index);
});
<ul id="wizard">
<li>Step 1</li>
<li>Step 2</li>
</ul>
Ou, si les éléments enfants peuvent changer dynamiquement (comme dans le cas d'une liste de tâches), vous devrez construire le tableau des éléments suivants li
à chaque clic, plutôt qu'à l'avance :
const wizard = document.querySelector('#wizard');
wizard.addEventListener('click', ({ target }) => {
// Make sure the clicked element is a <li>
if (!target.matches('li')) return;
const lis = [...wizard.children];
const index = lis.indexOf(target);
console.log(index);
});
<ul id="wizard">
<li>Step 1</li>
<li>Step 2</li>
</ul>