Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.09.2014, 05:15
Профессор
Отправить личное сообщение для cript Посмотреть профиль Найти все сообщения от cript
 
Регистрация: 03.02.2014
Сообщений: 238

Удаление фраз из строки
Приветствую!
Имеется такая строка.
<input type="hidden" name="g" value="'ab','b','c','dz'">

По определенному нажатию , например на ссылку <a href=".." data-g='dz' id="abc">link</a>
удаляется соответствующий символ (фраза), пытался делать таким способом
$('#abc').live('click',function(){
var _g = $('input[name=g]').val();
var g = this.getAttribute('data-g');
var g = ',\''+g+'\'';
var __g_field = new RegExp('(^|\\s+)' + g+ '(?=\\s+|$)', 'gi');
var _g = _g.replace(__g_field,'');
$('input[name=g]').val(_g);
})

В каком моменте ошибся?
Так же еще вопрос, если value содержит одно значение, то есть без запятых, как это определить ?
Ответить с цитированием
  #2 (permalink)  
Старый 24.09.2014, 08:32
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от cript
Имеется такая строка.
Сделать полный тестовый пример это так трудно?

Сообщение от cript
если value содержит одно значение, то есть без запятых, как это определить ?
Нужно просто правильно удалять те "фразы"...

Как вариант...
var str="'ab','b','c','dz'";
alert(str.replace(/,?'dz'/,''));

Последний раз редактировалось ksa, 24.09.2014 в 08:34.
Ответить с цитированием
  #3 (permalink)  
Старый 24.09.2014, 16:57
Профессор
Отправить личное сообщение для cript Посмотреть профиль Найти все сообщения от cript
 
Регистрация: 03.02.2014
Сообщений: 238

Сообщение от ksa Посмотреть сообщение
тестовый пример
<script src="http://code.internetrange.com/jquery-1.7.1.min.js"></script>
<script>
$('#abc').live('click',function(){
var _g = $('input[name=g]').val();
var g = this.getAttribute('data-g');
var g = ',\''+g+'\'';
var __g_field = new RegExp('(^|\\s+)' + g+ '(?=\\s+|$)', 'gi');
var _g = _g.replace(__g_field,'');
$('input[name=g]').val(_g);
})
</script>
<input type="text" name="g" value="'ab','b','c','dz'">
<a href="#" data-g='dz' id="abc">link</a>


Сообщение от ksa Посмотреть сообщение
Нужно просто правильно удалять те "фразы"...
Как вариант...
var str="'ab','b','c','dz'";
alert(str.replace(/,?'dz'/,''));
Да, но у меня переменная да еще и в кавычках
Ответить с цитированием
  #4 (permalink)  
Старый 24.09.2014, 17:05
Профессор
Отправить личное сообщение для WorM32 Посмотреть профиль Найти все сообщения от WorM32
 
Регистрация: 11.02.2014
Сообщений: 303

1. Прощу всего засплитить (split) строку в массив.
2. Найти и удалить нужный элемент массива
3. Собрать (join) строку обратно.

<span id="result">'abc','dbf','fsdf','4444','fsdfdsf'</span><br />
<input type="button" value="Удалить 'fsdf'">
<script>
var button = document.getElementsByTagName('input')[0],
    result = document.getElementById('result');
button.addEventListener('click', function () {
    var value = result.innerHTML,
        array = value.split(','),
        index = array.indexOf("'fsdf'");
    if (index > -1) {
        array.splice(index, 1);
        result.innerHTML = array.join(',');
    }
}, true);
</script>

Последний раз редактировалось WorM32, 24.09.2014 в 17:15.
Ответить с цитированием
  #5 (permalink)  
Старый 24.09.2014, 17:48
Профессор
Отправить личное сообщение для cript Посмотреть профиль Найти все сообщения от cript
 
Регистрация: 03.02.2014
Сообщений: 238

WorM32,
Решил попробовать ваш пример и все заработало! Премного благодарен.
Ответить с цитированием
  #6 (permalink)  
Старый 25.09.2014, 08:37
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от cript
Да, но у меня переменная да еще и в кавычках
Нет никакой разницы...

<!DOCTYPE html>
<html>
<head>
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<link rel='stylesheet type=text/css href=tmp.css' />
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function (){
	$('#abc').click(function(){
		var str = $('input[name=g]').val();
		var rg = this.getAttribute('data-g');
		rg = new RegExp(",?'"+rg+"'", 'gi');
		$('input[name=g]').val(str.replace(rg,''));
	})
});
</script>
</head>
<body>
<input type="text" name="g" value="'ab','b','c','dz'">
<a href="#" data-g='dz' id="abc">link</a>
</body>
</html>
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 25.09.2014, 08:38
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от WorM32
Прощу всего засплитить (split) строку в массив
Это смелое заявление...
Ответить с цитированием
  #8 (permalink)  
Старый 25.09.2014, 08:52
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

WorM32, я для интереса потестил на
http://jspeed.yanzigitov.ru/

Код 1
var value = "'abc','dbf','fsdf','4444','fsdfdsf'",
    array = value.split(','),
    index = array.indexOf("'fsdf'");
if (index > -1) {
    array.splice(index, 1);
    var str = array.join(',');
}

Результат (больше - лучше): ≈ 735 121 выполнений/1000 мс

Код 2
var str="'abc','dbf','fsdf','4444','fsdfdsf'";
str=str.replace(/,?'fsdfdsf'/gi,'');

Результат (больше - лучше): ≈ 1 304 203 выполнений/1000 мс
Ответить с цитированием
  #9 (permalink)  
Старый 25.09.2014, 09:12
Профессор
Отправить личное сообщение для WorM32 Посмотреть профиль Найти все сообщения от WorM32
 
Регистрация: 11.02.2014
Сообщений: 303

ksa,
Ну, во-первых, данный тест ничего не доказывает. Он лишь показывает, что второй код для данной строки будет работать быстрее, чем первый. Если взять другую строку( например, в 100 раз длиннее текущей) результат может быть совершенно противоположным.
Во-вторых, я не говорил, что мой код это будет максимально быстрое решение (чего не могу сказать и о вашем решении), я лишь сказал, что он проще для понимания.
Ответить с цитированием
  #10 (permalink)  
Старый 25.09.2014, 09:16
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от WorM32
он проще для понимания
Сделать массив, выполнить в нем поиск, удалить найденый элемент, переделать в строку - это проще понять, нежели замена простого регулярного выражения в строке на пустую строку?

Сообщение от WorM32
Если взять другую строку( например, в 100 раз длиннее текущей) результат может быть совершенно противоположным.
Вот тут бы тестом тем это подтвердить...
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление пробелов в начале и конце строки CyMKuH Общие вопросы Javascript 6 22.03.2016 13:41
Удаление строки в jqgrid pirat89 jQuery 3 06.02.2014 10:58
Удаление совпадения строки из строки feniks7 Общие вопросы Javascript 3 24.07.2013 22:15
удаление произвольной строки таблица kayuga jQuery 1 12.01.2011 04:40
удаление строки pingvinchic Events/DOM/Window 1 25.02.2010 17:32