Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   SWITCH чертов. Немогу понять в чем дело. (https://javascript.ru/forum/events/51090-switch-chertov-nemogu-ponyat-v-chem-delo.html)

skuty 23.10.2014 22:48

SWITCH чертов. Немогу понять в чем дело.
 
var domainlocation = window.location.href;

	var regular_exp = /.ua\/\w+/g;

	var result_domainlocation = domainlocation.match(regular_exp);




	if ( result_domainlocation == '.ua/Vinogradiv' ) {
		alert('Vinogradiv');
	}
	if ( result_domainlocation == '.ua/Beregove' ) {
		alert('Beregove');
	}




	switch (result_domainlocation) {
		case ".ua/Vinogradiv" : alert("Vinogradiv"); break;
		case ".ua/Beregove" :   alert('Beregove');
	}


Добрый день.
Такая банальная проблема
инструкция IF - все работает,
SWITCH - НЕТ.

подскажите в чем проблема(регулярка работает.)

рони 23.10.2014 23:04

skuty,
result_domainlocation у вас что? сам себе отвечаю массив или null
Цитата:

Сообщение от skuty
инструкция IF - все работает,

ой а если === вместо ==

skuty 23.10.2014 23:14

у меня получаеться result_domainlocation = ".ua/Vinogradiv" (допустим).
Еще одно, эта переменная как бы свойство обьекта. Может в этом дело?

та используя инструкцию IF код выполняеться.
а через switch почему то нет.
мне нужен switch, так как много вариантов будет.
я просто синтаксис незнаю или что. должен работать а не работает.

рони 23.10.2014 23:25

skuty,
ну превратите массив в строку то и сравнивайте
switch (''+result_domainlocation)

Цитата:

Сообщение от skuty
у меня получаеться result_domainlocation = ".ua/Vinogradiv" (допустим).

недопустим )))
у вас result_domainlocation = [".ua/Vinogradiv"]

рони 23.10.2014 23:32

skuty,
http://javascript.ru/comparison-operators
Цитата:

Равно (==) Если два операнда не одного типа, javascript преобразовывает типы и сравнивает строго. Если какой-либо операнд - число или булево значение, то операнды преобразуются в числа; если какой-либо операнд строка - второй преобразуются в строку
http://javascript.ru/String/match
http://javascript.ru/switch
Цитата:

Конструкция switch служит для сравнения значения на равенство с различными вариантами.

При этом равенство подразумевается в смысле оператора "===",
доки читать надо :cray:

skuty 23.10.2014 23:33

Спасибо... вот что значит лишние 2 символа. блин.))

danik.js 23.10.2014 23:37

Цитата:

Сообщение от skuty
var regular_exp = /.ua\/\w+/g;

Кстати, точку надо экранировать, или это метасимвол? Нужно отловить именно .ua или xua - где x - любой символ?

skuty 24.10.2014 00:25

именно .ua (так как из урл выбераеться)
спасибо.

Может подскажите как решить проще..
выборку

site.ua/poslugy
site.ua/Kiev/poslugy

при моем выражении береться первое слово, но в первом случаи мне не подходит.

я использую прямой пусть (window.location.href)
думаю в таком случаи использовать window.location.origin, так как у меня еще региональних доменов дофіг(типу kiev.ua, dn.ua, lviv.ua)

Aetae 24.10.2014 01:03

var regular_exp = /\.ua\/(\w+)\//;
var result_domainlocation = domainlocation.match(regular_exp);
if(result_domainlocation) result_domainlocation = result_domainlocation[1];

Цитата:

Сообщение от skuty (Сообщение 337222)
думаю в таком случаи использовать window.location.origin

Если можешь - используй, почему нет.

terminator-101 24.10.2014 01:13

Цитата:

Сообщение от skuty
site.ua/poslugy
site.ua/Kiev/poslugy

Чо проще? Регулярку? Ты выражайся ясней, опиши шаблон который тебе нужен. Если единственный адрес site.ua/Kiev/poslugy то так и пиши /^site\.ua\/Kiev\/poslugy$/, а если надо перескакивать через слеш, то /^site\.ua\/\w+\/poslugy$/i, опиши внятно шаблон. И зачем ты там g поставил? Хочешь чтобы матчились "site.ua/Kiev/poslugy/VSYA HUYNYA site.ua/Kiev/poslugy" или чо?

skuty 24.10.2014 01:36

есть сайты
site.ua/services
site.kiev.ua/services

site.dn.ua/services
site.dn.ua/Dobropole/services
site.dn.ua/Kirovskoe/services
site.dn.ua/Debalcevo/services

site.lviv.ua/services
site.lviv.ua/Zolochiv/services

и т.д. ...

для каждого разное содержимое.

нужно определить адрес загружаемого сайта и вывести соответственный блок.

terminator-101 24.10.2014 01:57

skuty,

вот так попробуйте
/^site\.(ua|kiev|dn|lviv)\S*\/services$/i

terminator-101 24.10.2014 02:14

skuty,
Точней, наверное, вот так будет

/^site\.(ua|kiev|dn|lviv)[/\w.-]*\/services$/i

Хотя для вас это особого значения не имеет, Вам насколько я понял, просто адрес надо хапнуть, на валидность проверять не надо.
ЗЫ и вот еще что. Если допустимы адреса вида site.ua/services/ (со слешем в конце) то

/^site\.(ua|kiev|dn|lviv)[/\w.-]*\/services\/?$/i

terminator-101 24.10.2014 02:38

skuty,
Да, вот еще что. Если будешь дергать не именно в таком виде, как ты написал site... а как то http://... то, само сабой, первый знак ^ тебе не нужен.

danik.js 24.10.2014 06:30

Цитата:

Сообщение от skuty
нужно определить адрес загружаемого сайта и вывести соответственный блок

Не уж то сервер не знает для какого региона генерируется страница? :D
Он наверняка знает, а значит не нужно никаких странных регулярок. Заметь, блок твой не проиндексируется поисковиками при твоем подходе )

kostyanet 24.10.2014 18:09

Процитирую целиком

Цитата:

Сообщение от skuty
есть сайты
site.ua/services
site.kiev.ua/services

site.dn.ua/services
site.dn.ua/Dobropole/services
site.dn.ua/Kirovskoe/services
site.dn.ua/Debalcevo/services

site.lviv.ua/services
site.lviv.ua/Zolochiv/services

и т.д. ...

для каждого разное содержимое.

нужно определить адрес загружаемого сайта и вывести соответственный блок.

Нетрудно заметить что в отличии от нормальных Search string - с которыми вы бы начухались - тут используются пути, которые фактически отождествляют namespace.

Несмотря что идея бредовая грузить весь контент динамически, контроллер тут очевидный объект (можно даже наследование организовать, если есть какие-то общие методы или свойства).

берем

site.dn.ua/services
site.dn.ua/Dobropole/services
site.dn.ua/Kirovskoe/services
site.dn.ua/Debalcevo/services

делаем

var sites = {

   'site.dn.ua':{

      services:{// тут добро},

      Dobropole:{
          services:{// тут добро}
      },

      Kirovskoe:{
          services:{// тут добро}
      },

      Debalcevo:{
          services:{// тут зло}
      }

   }
};


Теперь значиццо sites[location.hostname] нам дает путь к пропертям/методам данного домена, ну а дальше и так понятно. Колем pathname и профтыкаем в следующие квадратные скобки и немедленно попадаем на правильную дорогу.

kostyanet 24.10.2014 18:15

Я к тому что какой тут в п...у свич?

kostyanet 24.10.2014 18:22

Кстати да, я так навигацию делаю на сайтах, причем обычным массивом, без наворотов в стиле implements Countable, потому что в php есть указатели. С указателями приходиться быть очень осторожным, но зато вся тряхомудия туда-сюда не переписывается. Навигация базируется в БД в каноничном id pid дереве, откуда я ее засасываю в массив (ну, в объект конечно, чтобы глобально добывать) и дальше в любое время откуда хочешь что надо читаешь или пишешь.

skuty 25.10.2014 22:32

Я начинающий в этом деле... немного знаю.
Задача такова есть сайты:

site.dn.ua/services
site.dn.ua/Dobropole/services
site.dn.ua/Kirovskoe/services

у них один и тот же файл пхп(разная база данных). Я, хочу вставить небольшой блок инфо для каждого свой.

Потому решил делать проверку на window.location.href и выбрать регуляркой первое слово после (.ua).
Проверяю cвитчом.. какой сайт(точнее под сайт) и соответсвенный блок вставляю.

Минус этого способа, я немогу проверить одним свитчом
kiev.ua
или
dn.ua

Можно делать както свитч в свитче?) Допустим ниодин вариант не подошел, запустить другую проверку.(Допустив в дефаульте вставить?)

kostyanet 26.10.2014 19:16

Кто ему такое задание дал, Стрелков что ли?

Ладно, понятно что вы научились свитчить и собираетесь играть эту струну до пенсии.

А вот в случае с готовой картой ресурсов которая их по лесенке вам поднимет и выдаст что конкретно непонятно?

kostyanet 26.10.2014 19:28

var sites = {

  'site.ua':{
     'sevices': {
          alert('Контент для Сайт.Уа');
      }
   },

   'site.kiev.ua':{
      'services':{
          alert('Контент для Сайт.Киев.Уа');
      }
   },

   'site.dn.ua':{

      services:{
          alert('Контент для Сайт.ДыЫн.Уа');
      },

      Dobropole:{
          services:{
             alert('<ktfznm, что тут вообще можно не понять?');
         }
      },

      Kirovskoe:{
          services:{
              alert('В Кировском даже школьник бы понял что это...');
           }
      },

      Debalcevo:{
          services:{
              alert('... карта, которой все нормальные люди и пользуются');
         }
      }

   }
};


а ненормальные свистят.

Так вот господа читатели, если у ТС не хватает смелости запустить этот скрипт в своем срач-паде, это не значит что он не работает.

Работает, но я запускать не собираюсь. Это типовая карта которой все люди пользуются в именно таких случаях.

Захреном искать заранее известное скажите? Все и так известно заранее - составь карту и шарашь по ней. При необходимости добавляй или удаляй и все такое.

kostyanet 26.10.2014 19:51

Все-таки запустил. Оба примера выше были абстрактными, поскольку хз откуда он вообще контент берет - откуда вообще, на самом деле, если не с сервера? Вот конкретная конкретика. Контент должен лежать в оконечной проперти. Разумеется там может лежать ссылка на контент, индекс какой-нить или вместо проперти можно заделать функцию, но если функция то надо уже думать о наследстве... В общем если ТС еще раз глюканет как дежавю, то значит он живет в Матрице.

var sites = {

  'site.ua':{
     'sevices':'Контент для Сайт.Уа'
   },

   'site.kiev.ua':{
      'services':'Контент для Сайт.Киев.Уа'
   },

   'site.dn.ua':{

      services:'Контент для Сайт.ДыЫн.Уа',

      Dobropole:{
          services:'<ktfznm, что тут вообще можно не понять?'
      },

      Kirovskoe:{
          services:'В Кировском даже школьник бы понял что это...'
      },

      Debalcevo:{
          services:'... карта, которой все нормальные люди и пользуются'
      }
   }
};

try {
   var innerHTML = sites['site.dn.ua']['Kirovskoe']['services'];
}
catch(e){
   alert('Где-то накосячил!');
}

innerHTML;

/*
В Кировском даже школьник бы понял что это...
*/


Часовой пояс GMT +3, время: 03:25.