Переключение ClassList действительно предназначено для использования только при работе с одним классом.При переключении, если указанный класс существует, он будет удален, в противном случае он будет добавлен.В настоящее время ваш элемент всегда будет иметь класс fa-heart-o
, и вы пытаетесь добавить класс fa-heart
для его переопределения.
В FontAwesome класс fa-heart-o
определен после fa-heart
класс.Поэтому fa-heart-o
всегда будет переопределять fa-heart
, поскольку в противном случае они имеют одинаковую специфичность.См. MDN статью для получения дополнительной информации.
В вашем случае, вместо переключения одного класса, вам нужно удалить один класс и добавить другой.
Ваш скрипт можетвыглядеть так:
function myFunction(x) {
if ( x.classList.contains( "fa-heart") ) {
x.classList.remove( "fa-heart" );
x.classList.add( "fa-heart-o" );
}
else {
x.classList.remove( "fa-heart-o" );
x.classList.add( "fa-heart" );
}
}