Похоже, что вы запрашиваете селектор .completedLabel
глобально, когда вам просто нужно найти его внутри элемента, по которому щелкнули.
Может работать область действия селектора запросов до элемента, который вы храните в listItem . Вот пример:
const label = listItem.querySelector('.completedLabel');
Таким образом, он работает с повторным использованием вашего образца кода:
//move li item to completed list when checkbox selected
ul.addEventListener('change', (e) => {
const checkbox = e.target;
const checked = checkbox.checked;
const listItem = e.target.parentNode.parentNode;
const completedItems = document.querySelector('.completedItems');
const label = listItem.querySelector('.completedLabel');
if (checked) {
completedItems.appendChild(listItem);
label.style.display = 'none';
}
});
Однако реализация может быть немного улучшена.
На самом деле нет такого ограничения, что Вы не можете передать указатель на подставляемую функцию. Встроенное ключевое слово служит только в качестве подсказки к компилятору для встраивания вызовов, когда это может.
Проблема состоит в том, что страница справочника для scandir () немного вводит в заблуждение. Прототип в для 4-го параметра является на самом деле интервалом (*cmp) (константа пусто *, константа пусто *).
Поэтому необходимо изменить код как так:
static inline int RubyCompare(const void *a, const void *b)
{
return(strcmp((*(struct dirent **)a)->d_name,
(*(struct dirent **)b)->d_name));
}
Я не на самом деле уверен, почему Вы пишете эту функцию, тем не менее, потому что можно использовать обеспеченный alphasort, сравнивают функцию:
num = scandir(buf, &entries, NULL, alphasort);
Вы даете ему подсказку к подставляемой функции? Это не имеет смысла, на самом деле интересно, который он даже компилирует только с предупреждением.
Править: Chris выше прав, встроенное ключевое слово просто проигнорировано тихо, когда оно не имеет смысла / не применимо.
Этот прототип фактически был изменен в последней версии GNU libc, чтобы отразить стандарт POSIX.
Если у вас есть код, который вы хотите работать как со старым, так и с новым кодом, используйте макрос __GLIBC_PREREQ, например
#define USE_SCANDIR_VOIDPTR
#if defined( __GLIBC_PREREQ )
# if __GLIBC_PREREQ(2,10)
# undef USE_SCANDIR_VOIDPTR
# endif
#endif
#ifdef USE_SCANDIR_VOIDPTR
static int RubyCompare(const void *a, const void *b)
#else
static int RubyCompare(const struct dirent **a, const struct dirent **b)
#endif
...