#javascript #jquery #string #replace
#javascript #jquery #строка #заменить
Вопрос:
Я пытаюсь создать поле ввода textarea, которое автоматически заменяет определенные символы на разные символы; пример: когда пользователь вводит символ «a», он должен быть автоматически заменен символом «o». Я новичок в jquery, поэтому не могли бы вы рассказать, что не так со следующим кодом:
$(function() {
$('#myTextBox').keyup(function() {
$("a").replaceWith( "o" );
$("z").replaceWith( "N" );
$("y").replaceWith( "M" );
$("p").replaceWith( "f" );
$("v").replaceWith( "K" );
$("b").replaceWith( "P" );
});
});
Я ценю вашу помощь, спасибо
Редактировать:
спасибо всем, следующее сработало, как ожидалось:
$(function() {
$('#myTextBox').keyup(function() {
$(this).val($(this).val().replace(/a/g, "o"));
});
});
Комментарии:
1. Селектор jquery предназначен для выбора элементов dom. Не выбирать значение из текстового поля. вы должны использовать
val()
функцию для получения значений2. RE: «это правильно?» Ну, вы пробовали это в своем приложении?
3. Я изменил код используемой функции val (), но не уверен, правильно ли это..
Ответ №1:
Прежде всего $("a")
фактически нацелен на все элементы привязки на странице, поэтому я предполагаю, что это не то, что вы хотите (а других даже не существует, кроме p , поэтому ваш селектор ничего не вернет). Во-вторых, вы можете использовать регулярные выражения для выполнения вашей замены без какого-либо специального кода jQuery.
Вместо:
$("a").replaceWith( "o" );
Попробуйте:
$(this).val($(this).val().replace(/a/g, "o"));
Чтобы разбить это:
var oldValue = $(this).val();
var newValue = oldValue.replace(/a/g, "o");
// Set to new value
$(this).val(newValue);
Комментарии:
1. Это нормально для данного примера, но это не сработает для решения с транзитивными заменами без тщательного выполнения (и это вообще не сработает, если в конце оно будет циклическим). Представьте, что произойдет, если у вас также есть правило замены для «o», но вы сначала выполняете
a->o
замену, и вы поймете, что я имею в виду.2. @Platinum, хорошая мысль. В этом случае работает, но комментарий отличный.
Ответ №2:
$(document).ready(function() {
$(".normal").each(function() {
var text = $(this).html();
text = text.replace(/"/g, '');
$(this).html(text);
});
});
для чего-то вроде этого:
<div class="normal">Lorem "ipsum "dolor"</div>
Результат:
<div class="normal">Lorem ipsum dolor</div>