Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.02.2017, 14:51
Интересующийся
Отправить личное сообщение для 123456 Посмотреть профиль Найти все сообщения от 123456
 
Регистрация: 12.03.2011
Сообщений: 17

Открытая скобка в переменной
Здравствуйте!

Столкнулся с такой проблемой, никак не приложу ума как её решить. Был бы очень признателен за помощь.


Есть такой скрипт (кусок кода):

function find_relates ( )
	{
		var title = document.getElementById('title').value;
		
		var tit = title.substr(0, 60);
		
		...
                      
      if($(this).html().search(tit) == 0) {			// - Проблема проявяеться в этом месте (!!!)
    
    ...


Все работает прекрасно, НО до того момента как в переменную tit (title) попадает открытая скобка "(". Из-за нее рушится вся дальнейшая работа JS на странице. Подскажите как можно экранировать эту самую скобку? В случае когда переменная имеет статичные данные, там понятно, все ее содержимое отделено кавычками, а как быть когда переменная равна переменной?
Ответить с цитированием
  #2 (permalink)  
Старый 02.02.2017, 14:56
Кандидат Javascript-наук
Отправить личное сообщение для Diphenyl Oxalate Посмотреть профиль Найти все сообщения от Diphenyl Oxalate
 
Регистрация: 21.01.2017
Сообщений: 139

$(this).html().search( tit.replace(/\(/g, "") );
Ответить с цитированием
  #3 (permalink)  
Старый 02.02.2017, 15:10
Интересующийся
Отправить личное сообщение для 123456 Посмотреть профиль Найти все сообщения от 123456
 
Регистрация: 12.03.2011
Сообщений: 17

Сообщение от Diphenyl Oxalate Посмотреть сообщение
$(this).html().search( tit.replace(/\(/g, "") );
Спасибо, но так мы ведь совсем скобку убираем. А мне нужно просто ее как-то экранировать, так как в последствии, в скрипте будет производиться поиск регуляркой по списку на предмет идентичности.

Вот более полный код:

function find_relates ( )
	{
		var title = document.getElementById('title').value;
		
		var tit = title.substr(0, 60);
		
		ShowLoading('');

		$.post('engine/ajax/find_relates.php', { title: title }, function(data){
	
			HideLoading('');
	
			$('#related_news').html(data);				
			
			$('#related_news a').each(function(){
												
				if($(this).html().search(tit) == 0) {					
					$(this).css({'color': 'red', 'fontWeight': 'bold'});
				}
				
			})

		$('#short_story').text(title);

...

Последний раз редактировалось 123456, 02.02.2017 в 15:15.
Ответить с цитированием
  #4 (permalink)  
Старый 02.02.2017, 15:13
Кандидат Javascript-наук
Отправить личное сообщение для Diphenyl Oxalate Посмотреть профиль Найти все сообщения от Diphenyl Oxalate
 
Регистрация: 21.01.2017
Сообщений: 139

replace не изменяет исходную строку. Переменная tit остаётся прежней.
Ответить с цитированием
  #5 (permalink)  
Старый 02.02.2017, 15:20
Интересующийся
Отправить личное сообщение для 123456 Посмотреть профиль Найти все сообщения от 123456
 
Регистрация: 12.03.2011
Сообщений: 17

Сообщение от Diphenyl Oxalate Посмотреть сообщение
replace не изменяет исходную строку. Переменная tit остаётся прежней.
Это понятно, так код то все равно работать не будет так (находить соответствие между: "..это строка (со скобкой.." и "..это строка со скобкой..").

Последний раз редактировалось 123456, 02.02.2017 в 15:23.
Ответить с цитированием
  #6 (permalink)  
Старый 02.02.2017, 15:33
Интересующийся
Отправить личное сообщение для 123456 Посмотреть профиль Найти все сообщения от 123456
 
Регистрация: 12.03.2011
Сообщений: 17

Других способов нет указать скрипту что значение переменной является именно значением а не куском кода?
Ответить с цитированием
  #7 (permalink)  
Старый 02.02.2017, 15:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,135

123456,
строка 6
tit = tit.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
Ответить с цитированием
  #8 (permalink)  
Старый 02.02.2017, 16:18
Интересующийся
Отправить личное сообщение для 123456 Посмотреть профиль Найти все сообщения от 123456
 
Регистрация: 12.03.2011
Сообщений: 17

Сообщение от рони Посмотреть сообщение
123456,
строка 6
tit = tit.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
Эмм, тут есть еще момент. Все это дело (вызов JS) происходит в PHP файле посредством функции
echo "";


Так вот, после вставки на 6 строку указанного кода (кавычки пробовал менять на одинарные), выдает такую ошибку при попытке открытия страницы:

Parse error: syntax error, unexpected '}' in /home/z/myname/site.ru/public_html/engine/inc/addnews.php on line 175


175 строкой как раз и является данная вставка.

Последний раз редактировалось 123456, 02.02.2017 в 16:24.
Ответить с цитированием
  #9 (permalink)  
Старый 02.02.2017, 16:21
Интересующийся
Отправить личное сообщение для 123456 Посмотреть профиль Найти все сообщения от 123456
 
Регистрация: 12.03.2011
Сообщений: 17

Убрал из вставки фигурные скобки, страничка открылась, но JS не фурычит.

Браузер (консоль) выдает такую ошибку:
Uncaught SyntaxError: Invalid regular expression: missing /
Ответить с цитированием
  #10 (permalink)  
Старый 03.02.2017, 10:56
Интересующийся
Отправить личное сообщение для 123456 Посмотреть профиль Найти все сообщения от 123456
 
Регистрация: 12.03.2011
Сообщений: 17

Больше ни у кого идей нет?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение значения переменной в режиме реального времени The_FactioN jQuery 3 09.03.2016 12:20
Значение переменной присваивается только со второй попытки thesun Общие вопросы Javascript 9 29.01.2016 20:52
посылка переменной kent0026 jQuery 5 04.01.2014 17:34
Как значение переменной вставить в имя переменной? jsgogo Общие вопросы Javascript 3 02.06.2013 12:11
Значение переменной, как имя для другой переменной Kosty@n Общие вопросы Javascript 2 15.12.2012 22:58