Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Удаление фраз из строки (https://javascript.ru/forum/dom-window/50380-udalenie-fraz-iz-stroki.html)

cript 24.09.2014 05:15

Удаление фраз из строки
 
Приветствую!
Имеется такая строка.
<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 содержит одно значение, то есть без запятых, как это определить ?

ksa 24.09.2014 08:32

Цитата:

Сообщение от cript
Имеется такая строка.

Сделать полный тестовый пример это так трудно?

Цитата:

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

Нужно просто правильно удалять те "фразы"...

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

cript 24.09.2014 16:57

Цитата:

Сообщение от ksa (Сообщение 332042)
тестовый пример

<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 (Сообщение 332042)
Нужно просто правильно удалять те "фразы"...
Как вариант...
var str="'ab','b','c','dz'";
alert(str.replace(/,?'dz'/,''));

Да, но у меня переменная да еще и в кавычках

WorM32 24.09.2014 17:05

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>

cript 24.09.2014 17:48

WorM32,
Решил попробовать ваш пример и все заработало! Премного благодарен.

ksa 25.09.2014 08:37

Цитата:

Сообщение от 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>

ksa 25.09.2014 08:38

Цитата:

Сообщение от WorM32
Прощу всего засплитить (split) строку в массив

Это смелое заявление... :D

ksa 25.09.2014 08:52

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 мс

WorM32 25.09.2014 09:12

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

ksa 25.09.2014 09:16

Цитата:

Сообщение от WorM32
он проще для понимания

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

Цитата:

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

Вот тут бы тестом тем это подтвердить... :D


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