24.09.2014, 05:15
|
Профессор
|
|
Регистрация: 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 содержит одно значение, то есть без запятых, как это определить ?
|
|
24.09.2014, 08:32
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от cript
|
Имеется такая строка.
|
Сделать полный тестовый пример это так трудно?
Сообщение от cript
|
если value содержит одно значение, то есть без запятых, как это определить ?
|
Нужно просто правильно удалять те "фразы"...
Как вариант...
var str="'ab','b','c','dz'";
alert(str.replace(/,?'dz'/,''));
Последний раз редактировалось ksa, 24.09.2014 в 08:34.
|
|
24.09.2014, 16:57
|
Профессор
|
|
Регистрация: 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'/,''));
|
Да, но у меня переменная да еще и в кавычках
|
|
24.09.2014, 17:05
|
Профессор
|
|
Регистрация: 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.
|
|
24.09.2014, 17:48
|
Профессор
|
|
Регистрация: 03.02.2014
Сообщений: 238
|
|
WorM32,
Решил попробовать ваш пример и все заработало! Премного благодарен.
|
|
25.09.2014, 08:37
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от 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>
|
|
25.09.2014, 08:38
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от WorM32
|
Прощу всего засплитить (split) строку в массив
|
Это смелое заявление...
|
|
25.09.2014, 08:52
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
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 мс
|
|
25.09.2014, 09:12
|
Профессор
|
|
Регистрация: 11.02.2014
Сообщений: 303
|
|
ksa,
Ну, во-первых, данный тест ничего не доказывает. Он лишь показывает, что второй код для данной строки будет работать быстрее, чем первый. Если взять другую строку( например, в 100 раз длиннее текущей) результат может быть совершенно противоположным.
Во-вторых, я не говорил, что мой код это будет максимально быстрое решение (чего не могу сказать и о вашем решении), я лишь сказал, что он проще для понимания.
|
|
25.09.2014, 09:16
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от WorM32
|
он проще для понимания
|
Сделать массив, выполнить в нем поиск, удалить найденый элемент, переделать в строку - это проще понять, нежели замена простого регулярного выражения в строке на пустую строку?
Сообщение от WorM32
|
Если взять другую строку( например, в 100 раз длиннее текущей) результат может быть совершенно противоположным.
|
Вот тут бы тестом тем это подтвердить...
|
|
|
|