Хочу добавить активный класс в список с городами, как это сделать, ниже приведен мой код:
var cityChose = $('.region-show').text();
var geolocationCity = $('.geolocation__list li a').attr('data-city');
alert(cityChose);
alert(geolocationCity);
if (cityChose === geolocationCity) {
$('.geolocation__list a').addClass('active');
}
.active {
color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="region-show">Владивосток</div>
<br><hr><br>
<ul class="geolocation__list">
<li><a class="city" data-city="Москва">Москва</a></li>
<li><a class="city" data-city="Санкт-Петербург">Санкт-Петербург</a></li>
<li><a class="city" data-city="Алматы">Алматы</a></li>
<li><a class="city" data-city="Барнаул">Барнаул</a></li>
<li><a class="city" data-city="Владивосток">Владивосток</a></li>
<li><a class="city" data-city="Владимир">Владимир</a></li>
<li><a class="city" data-city="Воронеж">Воронеж</a></li>
<li><a class="city" data-city="Екатеринбург">Екатеринбург</a></li>
<li><a class="city" data-city="Казань">Казань</a></li>
<li><a class="city" data-city="Калининград">Калининград</a></li>
<li><a class="city" data-city="Кемерово">Кемерово</a></li>
<li><a class="city" data-city="Новосибирск">Новосибирск</a></li>
<li><a class="city" data-city="Омск">Омск</a></li>
</ul>
Получается лишь получить у DIV значение, а вот значение по всему списку получить не могу, получаю только первый результат, что бы сравнить если значения одинаковы, то добавляем класс к пункту в списке.
Вам нужно воспользоваться любым циклом, например .each:
var cityChose = $('.region-show').text();
var geolocationCities = $('.geolocation__list li a');
geolocationCities.each(function(i, el){
if (cityChose === $(el).attr('data-city')) {
$(el).addClass('active');
}
})
.active {
color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="region-show">Владивосток</div>
<br><hr><br>
<ul class="geolocation__list">
<li><a class="city" data-city="Москва">Москва</a></li>
<li><a class="city" data-city="Санкт-Петербург">Санкт-Петербург</a></li>
<li><a class="city" data-city="Алматы">Алматы</a></li>
<li><a class="city" data-city="Барнаул">Барнаул</a></li>
<li><a class="city" data-city="Владивосток">Владивосток</a></li>
<li><a class="city" data-city="Владимир">Владимир</a></li>
<li><a class="city" data-city="Воронеж">Воронеж</a></li>
<li><a class="city" data-city="Екатеринбург">Екатеринбург</a></li>
<li><a class="city" data-city="Казань">Казань</a></li>
<li><a class="city" data-city="Калининград">Калининград</a></li>
<li><a class="city" data-city="Кемерово">Кемерово</a></li>
<li><a class="city" data-city="Новосибирск">Новосибирск</a></li>
<li><a class="city" data-city="Омск">Омск</a></li>
</ul>
При получении значения методом .attr получается только значение первого элемента в коллекции, об этом написано в описании метода:
Get the value of an attribute for the first element in the set of matched elements
Вместо этого нужно пробежаться по элементам коллекции и добавить класс тем, чей атрибут совпадает с нужным значением, для этого можно воспользоваться методом each
var cityChose = $('.region-show').text();
var geolocationCity = $('.geolocation__list li a');
geolocationCity.each((i, v) => {
if ($(v).attr('data-city') == cityChose) {
$(v).addClass('active');
}
})
.active {
color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="region-show">Владивосток</div>
<br>
<hr><br>
<ul class="geolocation__list">
<li><a class="city" data-city="Москва">Москва</a></li>
<li><a class="city" data-city="Санкт-Петербург">Санкт-Петербург</a></li>
<li><a class="city" data-city="Алматы">Алматы</a></li>
<li><a class="city" data-city="Барнаул">Барнаул</a></li>
<li><a class="city" data-city="Владивосток">Владивосток</a></li>
<li><a class="city" data-city="Владимир">Владимир</a></li>
<li><a class="city" data-city="Воронеж">Воронеж</a></li>
<li><a class="city" data-city="Екатеринбург">Екатеринбург</a></li>
<li><a class="city" data-city="Казань">Казань</a></li>
<li><a class="city" data-city="Калининград">Калининград</a></li>
<li><a class="city" data-city="Кемерово">Кемерово</a></li>
<li><a class="city" data-city="Новосибирск">Новосибирск</a></li>
<li><a class="city" data-city="Омск">Омск</a></li>
</ul>
Также можно воспользоваться методом addClass, который может принимать функцию в качестве параметра:
var cityChose = $('.region-show').text();
var geolocationCity = $('.geolocation__list li a');
geolocationCity.addClass(function(i, className) {
if ($(this).attr('data-city') == cityChose) {
return className + ' ' + 'active';
}
return className;
})
.active {
color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="region-show">Владивосток</div>
<br>
<hr><br>
<ul class="geolocation__list">
<li><a class="city" data-city="Москва">Москва</a></li>
<li><a class="city" data-city="Санкт-Петербург">Санкт-Петербург</a></li>
<li><a class="city" data-city="Алматы">Алматы</a></li>
<li><a class="city" data-city="Барнаул">Барнаул</a></li>
<li><a class="city" data-city="Владивосток">Владивосток</a></li>
<li><a class="city" data-city="Владимир">Владимир</a></li>
<li><a class="city" data-city="Воронеж">Воронеж</a></li>
<li><a class="city" data-city="Екатеринбург">Екатеринбург</a></li>
<li><a class="city" data-city="Казань">Казань</a></li>
<li><a class="city" data-city="Калининград">Калининград</a></li>
<li><a class="city" data-city="Кемерово">Кемерово</a></li>
<li><a class="city" data-city="Новосибирск">Новосибирск</a></li>
<li><a class="city" data-city="Омск">Омск</a></li>
</ul>
Ну и всегда можно сразу выбрать нужные элементы, к которым уже будет применяться addClass:
var cityChose = $('.region-show').text();
$(`.geolocation__list li a[data-city=${cityChose}]`).addClass('active');
.active {
color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="region-show">Владивосток</div>
<br>
<hr><br>
<ul class="geolocation__list">
<li><a class="city" data-city="Москва">Москва</a></li>
<li><a class="city" data-city="Санкт-Петербург">Санкт-Петербург</a></li>
<li><a class="city" data-city="Алматы">Алматы</a></li>
<li><a class="city" data-city="Барнаул">Барнаул</a></li>
<li><a class="city" data-city="Владивосток">Владивосток</a></li>
<li><a class="city" data-city="Владимир">Владимир</a></li>
<li><a class="city" data-city="Воронеж">Воронеж</a></li>
<li><a class="city" data-city="Екатеринбург">Екатеринбург</a></li>
<li><a class="city" data-city="Казань">Казань</a></li>
<li><a class="city" data-city="Калининград">Калининград</a></li>
<li><a class="city" data-city="Кемерово">Кемерово</a></li>
<li><a class="city" data-city="Новосибирск">Новосибирск</a></li>
<li><a class="city" data-city="Омск">Омск</a></li>
</ul>
Опередили:) Вот работающий код: Обратите внимание что element - это не объект jquery, а объект DOM
$(document).ready(function() {
var cityChose = $('.region-show').text();
var geolocationCitys = $('.geolocation__list li a');
for (let i=0;i<geolocationCitys.length;i++) {
let element=geolocationCitys[i];
let tgt=element.getAttribute('data-city');
if (tgt == cityChose) {
element.classList.add('active');
break;
}
}
});
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости