Почему код не срабатывает, хотя он написан с соблюдением разных стандартов (ECMAScript) ? Вот код:
$('.tab').click( function () {
$('.tab').css({
'color': 'gray',
'border': '1px solid #ececec'
});
$(this).css({
'color': '#000',
'border': '1px solid orange'
})
} );
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="tab">1</div>
<div class="tab">2</div>
<div class="tab">3</div>
<div class="tab">4</div>
<div class="tab">5</div>
<div class="tab">6</div>
А этот не срабатывает ...
$('.tab').click( ()=>{
$('.tab').css({
'color': 'gray',
'border': '1px solid #ececec'
});
$(this).css({
'color': '#000',
'border': '1px solid orange'
})
} );
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="tab">1</div>
<div class="tab">2</div>
<div class="tab">3</div>
<div class="tab">4</div>
<div class="tab">5</div>
<div class="tab">6</div>
Потому что стрелочная функция не имеет своего this-а.
// 1.
$('.tab').click( ()=>{
...
$(this).css({ // !!! this здесь тот же, что и в строчке 1.
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
Главная особенность стрелочных функций не их краткость, а то что у них нет контекста, то есть this не установлен на $('.tab'):
$('.tab').click( function(){console.log(this);} ); // Html элемент
$('.tab').click( () => {console.log(this);} ); // Window
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="tab">Click</div>
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости