Удаление фраз из строки
Приветствую!
Имеется такая строка. <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 содержит одно значение, то есть без запятых, как это определить ? |
Цитата:
Цитата:
Как вариант... var str="'ab','b','c','dz'"; alert(str.replace(/,?'dz'/,'')); |
Цитата:
<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> Цитата:
|
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,
Решил попробовать ваш пример и все заработало! Премного благодарен. |
Цитата:
<!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> |
Цитата:
|
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 мс |
ksa,
Ну, во-первых, данный тест ничего не доказывает. Он лишь показывает, что второй код для данной строки будет работать быстрее, чем первый. Если взять другую строку( например, в 100 раз длиннее текущей) результат может быть совершенно противоположным. Во-вторых, я не говорил, что мой код это будет максимально быстрое решение (чего не могу сказать и о вашем решении), я лишь сказал, что он проще для понимания. |
Цитата:
Цитата:
|
Цитата:
var value = "'abc','dbf','fsdf','4444','dbf','fsdf','4444','dbf','fsdf','4444','fsdfdsf'" Добавил ооочень много раз (более 100раз) Вот результат теста Код 1 Цитата:
Цитата:
|
Цитата:
Цитата:
Код 1: Результат (больше - лучше): ≈ 157 863 выполнений/1000 мс Код 2: Результат (больше - лучше): ≈ 92 441 выполнений/1000 мс |
Цитата:
|
Если просто копировал ее всю - тебе придется дописывать цикл, для удаления всех ключевых фраз, а не одной, как у тебя сейчас.
Поскольку регулярка-то замент именно все фразы... |
Цитата:
|
ksa,
Переделал тест в самый худший вариант, когда искомая строка находится в самом конце. Первый код проигрывает второму на 12%. Еще есть такой тест, но это немного не то. http://jsperf.com/string-vs-array-indexof/2 |
Задача изначально бредовая, вся на костылях, но автор и под пытками не расколется чего он там отслеживает. Или расколется? ;)
|
Часовой пояс GMT +3, время: 02:06. |