#javascript #replace #find #contains
#javascript #заменить #Найти #содержит
Вопрос:
Я пытаюсь перебрать набор элементов / кнопок DOM. Затем я хочу найти конкретное слово и заменить его двумя словами.
Это работает практически во всех сценариях.
Например, следующий код изменит текст divs на «ЯБЛОКИ».
let buttons = document.getElementsByClassName("main-buttons");
for(var i=0; i<buttons.length; i ) {
var res = buttons[i].innerHTML.replace(/ORANGE/gi, "APPLES");
buttons[i].innerHTML = res;
};
Однако у меня возникла проблема, когда я хочу заменить «ОРАНЖЕВЫЙ» на «ОРАНЖЕВЫЕ ШАРЫ».
Вместо того, чтобы видеть слова «ОРАНЖЕВЫЕ ВОЗДУШНЫЕ ШАРЫ» в моих кнопках. Я вижу «ОРАНЖЕВЫЕ ВОЗДУШНЫЕ ШАРЫ».
let buttons = document.getElementsByClassName("main-buttons");
for(var i=0; i<buttons.length; i ) {
var res = buttons[i].innerHTML.replace(/ORANGE/gi, "ORANGE BALLOONS");
buttons[i].innerHTML = res;
};
Я знаю, что это как-то связано с регулярным выражением и моим циклом захвата «orange», но я задавался вопросом, есть ли лучший способ поиска и замены в javascript.
Или найдите слово и добавьте рядом с ним другое.
Комментарии:
1. каким был ваш текст до того, как вы увидели «ОРАНЖЕВЫЕ ВОЗДУШНЫЕ ШАРЫ»?
2. @GabrielLupu — Это был просто «ОРАНЖЕВЫЙ»
Ответ №1:
Вы можете просмотреть отрицательный результат BALLOONS
при сопоставлении ORANGE
, чтобы убедиться, что существующее ORANGE BALLOONS
не будет изменено:
for (const button of document.querySelectorAll('.main-buttons')) {
button.innerHTML = button.innerHTML.replace(
/ORANGE(?! BALLOONS)/gi,
'ORANGE BALLOONS'
);
}
Если каждый из этих элементов содержит только текст, также измените значение innerHTML
на textContent
— лучше использовать только innerHTML
с HTML-разметкой. (в случае обычного текста .textContent
более уместно, быстрее и безопаснее)