Javascript заменяет текст после подчеркивания

#javascript #regex #toggle

#javascript #регулярное выражение #переключить

Вопрос:

Я пытаюсь заменить некоторый текст после подчеркивания в имени файла.

Пример имени файла: FileName_true.png . Мне нужно изменить его на FileName_false.png .

В принципе, у меня есть изображение, которое я хочу изменить, когда вы нажимаете на него. (цветной на черно-белый и наоборот). Я думал об использовании переключателя в jQuery, но я не был уверен, что смогу сделать это примерно с 5 изображениями, не дублируя код 5 раз.

Я думал создать функцию, которая использует регулярное выражение для записи ‘true’ или ‘false в имени файла изображения, на которое вы нажали, и замены его альтернативным.

Что вы думаете о выполнении этого? Я бы хотел, чтобы это было сделано на PHP, если возможно, но если нет, то на JavaScript / jQuery. Спасибо за любую помощь! И дайте мне знать, если у вас возникнут какие-либо вопросы.

Ответ №1:

 filename = filename.replace('_true','_false');
  

ни jQuery, ни regexp не нужны

 <img src="FileName_true.png"
onclick="this.src=(this.src.indexOf('_true')!=-1)?this.src.replace('true','false'):this.src.replace('false','true')" />
  

это то, что я мог придумать в этот поздний час

Делать это в php было бы просто глупо и потребовался бы файл cookie

Комментарии:

1. Большое спасибо… я попробую это сделать. Теперь, есть ли способ сохранить новое имя файла в переменной или скрытом вводе, чтобы я мог передать его в форме. Изображение находится внутри формы, а имя файла извлекается из базы данных (через PHP), и я хочу иметь возможность сохранять новое текущее состояние имени файла в базе данных при отправке формы.

Ответ №2:

Ответ mplungjan отличный, но позвольте мне предложить несколько альтернатив. Замену изображений лучше всего выполнять с помощью спрайта, чтобы никогда не возникало задержек при переключении между изображениями. Поместите обе версии изображения рядом друг с другом в один файл. Установите это изображение в качестве фона div и отрегулируйте положение фона для отображения того или иного изображения.

Предположим, что «pic1_bw_color_sprite.png» представляет собой цветное изображение размером 75×75 с черно-белым изображением размером 75×75 под ним, что делает конечное изображение 75 пикселей в ширину и 150 пикселей в высоту. Настройте свой css следующим образом:

 #pic1
{
    background-image: url(pic1_bw_color_sprite.png);
    height: 75px;
    width: 75px;
}
#pic1.bw
{
    background-position: 0px -75px;
}
  

Затем несколько простых jQuery, чтобы все это заработало:

 $("#pic1").click(function()
{
    $(this).toggleClass("bw");
});
  

Попробуйте это здесь: http://jsfiddle.net/gilly3/B7esz /

Что касается дублирования кода, то это единственное, чего jQuery очень хорошо умеет избегать. Просто используйте селектор, который включает каждый класс, которому требуется поведение:

 $("#pic1,#pic2,#pic3,#pic4").click(...);
// or
$(".bwSwap").click(...);
  

Чтобы сохранить текущее состояние в форме, чтобы вы могли обновлять свою базу данных, вам нужно получить ссылку на ваш элемент формы, затем задать value свойство (или .val() в jQuery).

 $("#pic1").click(function()
{
    $(this).toggleClass("bw");
    $("#pic1isBW").val($(this).hasClass("bw"));
});
  

Комментарии:

1. Отлично, спасибо! Похоже, это может быть лучшим вариантом. Хотя я сохраняю имя файла в базе данных, чтобы на него можно было ссылаться позже. Есть ли у вас какие-либо идеи по поводу моего комментария к ответу mplungjan о том, как сохранить новое имя файла в базе данных?

2. @Ryan — Чтобы получить значение в форме, просто заполните value свойство элемента. Я добавил пример в свой ответ.

3. 1 для спрайта. Я должен это помнить. Изначально это требует немного больше работы, поскольку вам нужно изменить все изображения, которые вы хотите переключить на спрайты.