Помогите поправить скрипт определяющий гео с помощью API Яндекса

12
D
На сайте с 31.01.2017
Offline
15
#11

Я так понимаю их много, в каждом своя цена? Опишите подробней.

W
На сайте с 14.11.2012
Offline
41
#12
demiux:
Я так понимаю их много, в каждом своя цена? Опишите подробней.

Этих тегов <span class="currency"></span> несколько на странице. Но цена у них одна. Та стоимость, которая присвоена в зависимости от страны с помощью уже этой рабочей версии скрипта.


<!-- Geo -->
<script src="http://yastatic.net/jquery/2.1.1/jquery.min.js"></script>
<script src="http://api-maps.yandex.ru/2.0-stable/?load=package.standard&lang=ru-RU"type="text/javascript"></script>
<script type="text/javascript">
window.onload =function(){
jQuery(".user-city").text(ymaps.geolocation.city);
jQuery(".user-region").text(ymaps.geolocation.region);
jQuery(".user-country").text(ymaps.geolocation.country);
var currency = '1000 рублей';
switch (ymaps.geolocation.country) {
case 'Казахстан':
currency = '5000 тенге';
break;
case 'Беларусь':
currency = '1000 бел. рублей';
break;
}
document.querySelector('span.currency').innerHTML = currency;
}
</script>
<!-- /Geo -->

Если к примеру страна определилась как Казахстан, то везде в <span class="currency"></span> должно быть 5000 тенге. Но проблема в том, что отображается эта стоимость только одни раз на странице, там где тег span указан первым. Как если бы вместо class бул указан id, и при этом продублирован. Я так понимаю проблема в этой части когда:

document.querySelector('span.currency').innerHTML = currency

Но что именно не так, мне не понятно.

D
На сайте с 31.01.2017
Offline
15
#13

Document.querySelector() - Возвращает первый элемент внутри документа. Вам нужен Document.querySelectorAll()

Для IE 9 и выше

document.querySelectorAll('span.currency').forEach(function(span){

span.innerHTML = currency;
});

или на jquery

$('span.currency').each(function(){

this.innerHTML = currency;
});

Еще бы порекомендовал, для правильной индексации, значение по умолчанию сразу выводить в span на сервере.

А js поменять на такой:

var currency;

switch (ymaps.geolocation.country) {
case 'Казахстан':
currency = '5000 тенге';
break;
case 'Беларусь':
currency = '1000 бел. рублей';
break;
}

if(currency) {
document.querySelectorAll('span.currency').forEach(function(span){
span.innerHTML = currency;
});
}
W
На сайте с 14.11.2012
Offline
41
#14
demiux:
Document.querySelector() - Возвращает первый элемент внутри документа. Вам нужен Document.querySelectorAll()

Для IE 9 и выше
document.querySelectorAll('span.currency').forEach(function(span){

span.innerHTML = currency;
});

или на jquery
$('span.currency').each(function(){

this.innerHTML = currency;
});


Еще бы порекомендовал, для правильной индексации, значение по умолчанию сразу выводить в span на сервере.
А js поменять на такой:
var currency;

switch (ymaps.geolocation.country) {
case 'Казахстан':
currency = '5000 тенге';
break;
case 'Беларусь':
currency = '1000 бел. рублей';
break;
}

if(currency) {
document.querySelectorAll('span.currency').forEach(function(span){
span.innerHTML = currency;
});
}

Благодарю вас. А в мобильных браузерах все это будет нормально работать?

D
На сайте с 31.01.2017
Offline
15
#15

IE 9 и выше, остальные браузеры поддерживают все используемые в этом коде функции. По ссылкам на сайте developer.mozilla.org внизу есть таблица совместимости.

Если все же сомневаетесь, используете jquery версию. Судя по приведенному коду он у вас подключен.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий