Если я правильно понимаю, то вашу проблему не невозможно решить. Вы можете попробовать подход, как я сделал ниже. По сути, вы хотите проверить введенную пользователем строку ввода для вашего символа target
(в данном случае "@"). Если вы найдете target
в строке, то split
выведет входную строку в массив. Если у вас есть этот массив, вы можете использовать метод Array.prototype.map
, чтобы создать новый массив. Ваш обратный вызов map
должен проверить, содержит ли текущий элемент target
- если он есть, просто замените его желаемой строкой замены, в противном случае просто оставьте входные данные такими, как есть:
const divEditable = document.getElementById('editable_div');
document.getElementById('btnPlaying').addEventListener('click', function() {
var input = divEditable.innerHTML;
var target = '@';
if (input.length && input.indexOf(target) > -1) {
divEditable.innerHTML = doReplace(input, target, 'playing');
}
});
function doReplace(input, target, replacement) {
var words = input.split(' ').map(function(word) {
if (word.indexOf(target) > -1) {
return replacement;
}
return word;
});
return words.join(' ');
}
<div id="editable_div" style="height: 75px; border-style: groove;" class="editable_div" contenteditable>
</div>
<div class="description">Type am "@school" such that the carret is after school then click playing</div>
<button id="btnPlaying">playing</button>