У меня есть этот код для замены выделенного текста (это Путс "1" и "2" до и после того, как выбран текст):Замена выделенного текста HTML в JQuery
var content=$("#text").html();
if (window.getSelection) {
// not IE case
var selObj = window.getSelection();
var selRange = selObj.getRangeAt(0);
content2 = content.substring(0,selRange.startOffset) + "1" + content.substring(selRange.startOffset,selRange.endOffset) + "2" + content.substring(selRange.endOffset,content.length);
$("#content").html(content2);
selRange.removeAllRanges();
} else if (document.selection && document.selection.createRange && document.selection.type != "None") {
// IE case
range = document.selection.createRange();
var selectedText = range.text;
var newText = '1' + selectedText + '2';
document.selection.createRange().text = newText;
}
И HTML:
<div id="text">aaa as asd das d</div>
Это хорошо работает с «чистым» текстом, но если мой HTML выглядит следующим образом (текст жирного шрифта)
<div id="text">aaa as <b>asd</b> das d</div>
Он ломается в светлячок, потому что selRan Объект ge.startOffset не возвращает желаемое местоположение ...
И еще один вопрос ... В IE это отлично работает с жирным и «нормальным» текстом, но поскольку для IE я не использую функцию jquery html() текст не может быть заменен HTML-кодом. Поэтому, если я хочу использовать «< b>» и «</b>», а не «1» и «2», текст не будет выделен жирным шрифтом в Firefox.
Можно ли устранить эту проблему?