2015-03-22 2 views
1

Я пытаюсь создать выделенное синтаксисом поле поиска, где некоторые элементы являются конкретным цветом, полужирным шрифтом, подчеркиванием и т. Д., Когда я печатаю. Когда я печатаю, я хотел бы, чтобы слово in стало полужирным. Это работает с тем, что у меня есть, но когда набирается in, курсор переходит в начало div, и вы не можете вводить ничего после слова in. Что я могу сделать, чтобы исправить это? Вы можете увидеть jsfiddle here.div форма поиска с форматированием

JavaScript:

$(document).on("keyup", "#q", function(){ 
    var val = $(this).text(); 
    val = val.replace(/\sin\s/ig, " <b>in</b> "); 
    $(this).html(val); 
}); 

HTML-

<div id="q" name="q" class="form-control input-lg" contenteditable="true"></div> 
+0

Off верхней части моей головы, первый я попытался бы получить позицию курсора в начале функции и поместить ее туда в конце функции. – blex

+0

См. ['Window.getSelection'] (https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection) - в частности [' .getRangeAt'] (https: //developer.mozilla .org/en-US/docs/Web/API/Selection/getRangeAt) и ['.addRange'] (https://developer.mozilla.org/en-US/docs/Web/API/Selection/addRange). – Toothbrush

+0

Я нашел это для получения позиции: http://stackoverflow.com/a/3976125/1778465, и я нашел это для установки его http://stackoverflow.com/a/6249440/1778465, второй на меня дает мне это ошибка: 'Uncaught IndexSizeError: не удалось выполнить 'setStart' в 'Range': смещение 12 больше или равно длине узла (9).' –

ответ

0

С rangy library я был в состоянии сделать это так:

$(document).on("keyup", "#q", function(){ 
    var savedSel = rangy.saveSelection(); 
    var val = $(this).html(); 
    val = val.replace(/\sin\s/ig, " <b>in</b> "); 
    $(this).html(val); 
    rangy.restoreSelection(savedSel); 
});