Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Замена по требованию (https://javascript.ru/forum/jquery/60294-zamena-po-trebovaniyu.html)

snovapavel 21.12.2015 21:27

Замена по требованию
 
Добрый день, друзья!

Пытаюсь сделать замену в тексте по регулярным выражениям если стоят определённые галочки. Например, если стоит галочка «Заменить всех Вась» то в исходном тексте заменяются все Васи, а если «Заменить всех Петь», то заменяются также все Пети. В общем, подключение определённого выражения по требованию.

Накропал пока вот что, но это не работает..:

<form>
    <textarea name="input" id="input" cols="60" rows="10" placeholder="Исходный текст"></textarea>
    <br>
    <button id="proceed">Заменить</button>
    <button type="reset">Очистить</button>
    <br>
    <textarea name="output" id="output" cols="60" rows="10" placeholder="Результат"></textarea>
</form>




<form>
    <label for="checkbox1">
        <input type="checkbox" id="checkbox1" name="checkbox">Обернуть всех Петь</label>
    <label for="checkbox2">
        <input type="checkbox" id="checkbox2" name="checkbox">Обернуть всех Вась</label>
</form>





$(function() {
		$("#proceed").click(function(event){
			event.preventDefault();
			$("#input").each(function(){
				$("#output").val($(this).val()
					if($("input:checkbox[id='checkbox1']").is(":checked")) {
						.replace(/Петя/g, "<a href='#'>Петя</a>");
					}
					if($("input:checkbox[id='checkbox2']").is(":checked")) {
						.replace(/Вася/g, "<a href='#'>Вася</a>");
					}
				);
			});
		});
	});


Вот пример на jsfiddle.net

Где я ошибся? Подскажите пожалуйста...

gbb 21.12.2015 21:43

.replace(/Петя/g, "<a href='#'>Петя</a>");

Вот тут скорей всего. То что ты вызываешь, эквивалентно .replace, вызванном в глобальном контексте и тут скорей всего выскакивает ошибка. делай
concretElement.innerHTML = concretElement.innerHTML.replace(...)

либо concretElement.value, в зависимости от того, что там у тебя

рони 21.12.2015 21:57

snovapavel,
$(function() {
    $("#proceed").click(function(event) {
        event.preventDefault();
        var val = $("#input").val();
        if ($("input:checkbox[id='checkbox1']").is(":checked")) val = val.replace(/Петя/g, "<a href='#'>Петя</a>");
        if ($("input:checkbox[id='checkbox2']").is(":checked")) val = val.replace(/Вася/g, "<a href='#'>Вася</a>");
        $("#output").val(val)
    })
});

gbb 21.12.2015 22:05

Кстати, вспомнился забавный факт. Есть языки, где действительно можно так сделать.
o := Object clone do(
   flag := true
   string := "foo bar baz" asMutable
)

o do(
  if(flag, string replaceSeq("bar", "moo"))
)


o string print

#>>>> foo moo baz

:)

строки -- первоклассные муттабельные объекты + безкостыльное динамическое связывание + все есть выражение (if -- просто функция) -- одним словом Ъ-ООП, и, вуаля:)

snovapavel 22.12.2015 08:13

Огромное спасибо!


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