Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.12.2018, 11:41
Новичок на форуме
Отправить личное сообщение для rucoo Посмотреть профиль Найти все сообщения от rucoo
 
Регистрация: 04.12.2018
Сообщений: 2

Не могу передать переменную
Добрый день, Уважаемые коллеги.

Вопрос стоит в следующем.

У меня есть код который по API yandex.map. получает переменную а именно название города посетителя.

Мне необходимо из функции ниже взять название города он выводиться так "город" сделать так чтобы выводилось в "городе"
<script>
 ymaps.ready(function(){
        var sity = ymaps.geolocation.city;
        $('#wb_gorod').text('Город: '+sity);
}
</script>



Я нашел функцию которая меняет окончания из Именительного "Краснодар" падежа в Предложный падеж "Краснодаре"

Вот эта функция:

"toCase( String str, String case );"

var words={"Мама":"р", "Хабр":"д", "Поросёнок":"в", "Ночь":"т", "Отец":"п"}, result="";
for(var i in words){
    result+=words[i].toUpperCase()+".: "+toCase(i,words[i])+"\n"
}
return result
* This source code was highlighted with Source Code Highlighter.


Предлагаю сами внутренности функции:
function toCase(str, choice) {
    var strPub = { // правила для окончаний
        "а": ["ы", "е", "у", "ой", "е"],
        "(ш/ж/к/ч)а": ["%и", "%е", "%у", "%ой", "%е"],
        "б/в/м/г/д/л/ж/з/к/н/п/т/ф/ч/ц/щ/р/х": ["%а", "%у", "%а", "%ом", "%е"],
        "и": ["ей", "ям", "%", "ями", "ях"],
        "ый": ["ого", "ому", "%", "ым", "ом"],
        "й": ["я", "ю", "я", "ем", "е"],
        "о": ["а", "у", "%", "ом", "е"],
        "с/ш": ["%а", "%у", "%", "%ом", "%е"],
        "ы": ["ов", "ам", "%", "ами", "ах"],
        "ь": ["я", "ю", "я", "ем", "е"],
        "уль": ["ули", "уле", "улю", "улей", "уле"],
        "(ч/ш/д/т)ь": ["%и", "%и", "%ь", "%ью", "%и"],
        "я": ["и", "е", "ю", "ей", "е"]
    },
    cases = { // номера для падежей, не считая Именительный
        "р": 0,
        "д": 1,
        "в": 2,
        "т": 3,
        "п": 4
    },
    exs = { // исключения, сколько символов забирать с конца
        "ц": 2,
        "ок": 2
    },
    lastIndex,reformedStr,forLong,splitted,groupped,forPseudo;
    for(var i in strPub){
        if(i.length > 1 && str.slice(-i.length) == i){ // для окончаний, длиной >1
            lastIndex = i;
            reformedStr = str.slice(0, -lastIndex.length);
            break;
        }
        else if(/[\(\)]+/g.test(i)){ // фича: группировка окончаний
            i.replace(/\(([^\(\)]+)\)([^\(\)]+)?/g, function(a, b, c){
                splitted = b.split("/");
                for(var o = 0; o < splitted.length; o++){
                    groupped = splitted[o] + c;
                    strPub[groupped] = strPub[i];
                    if(str.slice(-groupped.length) == groupped){
                        for(var x = 0, eachSplited = strPub[groupped];x < eachSplited.length; x++){
                            eachSplited[x] = eachSplited[x].replace("%", splitted[o]);
                        }
                        reformedStr = str.slice(0, -groupped.length);
                        forPseudo = groupped;
                    }
                }
            })
        }
        else{ // дефолт
            lastIndex = str.slice(-1);
            reformedStr = str.slice(0, -(forPseudo || lastIndex).length);
        }
        if(/\//.test(i) && !(/[\(\)]+/g.test(i)) && new RegExp(lastIndex).test(i))forLong = i; // группированные окончания, разделающиеся слешем
        for(var o in exs){ // поиск исключений
            if(str.slice(-o.length) == o)reformedStr = str.slice(0, -exs[o]);
        }
    }
    return reformedStr + strPub[(forPseudo || forLong || lastIndex)][cases[choice]].replace("%", lastIndex)
}
* This source code was highlighted with Source Code Highlighter.



Суть в следующем мне необходимо
В функцию - "toCase( String str, String case );"
передать переменную - "ymaps.geolocation.city" и вывести вместо города "Краснодар", город в предложном падеже "Краснодаре"
Буду рад за любую помощь.

Последний раз редактировалось rucoo, 04.12.2018 в 11:48.
Ответить с цитированием
  #2 (permalink)  
Старый 04.12.2018, 11:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

rucoo,

<script>
 ymaps.ready(function(){
        var sity = ymaps.geolocation.city;
        sity =  toCase(sity, "п")
        $('#wb_gorod').text('Городе: '+sity);
})
</script>

Последний раз редактировалось рони, 04.12.2018 в 11:58.
Ответить с цитированием
  #3 (permalink)  
Старый 04.12.2018, 12:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

rucoo,
ymaps.ready(function(){
        var sity = ymaps.geolocation.city;
        var str = 'Городе: '
        if(sity){
             str +=  toCase(sity, "п")
        }
        else str = "Включите геолокацию";
        $('#wb_gorod').text(str);
})
Ответить с цитированием
  #4 (permalink)  
Старый 04.12.2018, 12:20
Новичок на форуме
Отправить личное сообщение для rucoo Посмотреть профиль Найти все сообщения от rucoo
 
Регистрация: 04.12.2018
Сообщений: 2

Рони. Спасибо, большое цены тебе нет!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу передать переменную frundik AJAX и COMET 17 23.05.2012 18:31
Могу ли я выкладывать в портфолио работу которую я делал? Policeman Оффтопик 14 01.02.2012 15:35
Установить переменную (не могу справиться с параллельностью) Sufir Общие вопросы Javascript 2 15.12.2011 17:19
Не могу записать значение в переменную!!! di@mond Элементы интерфейса 3 30.06.2009 23:05
Скрипт калькулятора (не могу добавить еще одно значение) Jee_Day Я не знаю javascript 2 22.05.2009 13:19