Я могу использовать следующий код для получения выделенного текста:
 text=window.getSelection(); /// for Firefox
text=document.selection.createRange().text; /// for IE
Но как я могу получить выбранный Html, который включает в себя теги text и html?
Я могу использовать следующий код для получения выделенного текста:
 text=window.getSelection(); /// for Firefox
text=document.selection.createRange().text; /// for IE
Но как я могу получить выбранный Html, который включает в себя теги text и html?
В IE <= 10 браузерах это:
document.selection.createRange().htmlText
Как отметил @DarrenMB, IE11 больше не поддерживает это. См. этот ответ для справки.
В браузерах, отличных от IE, я просто попытался сыграть с этим... это, похоже, работает, У БЕЛКА есть побочные эффекты от разрыва узлов пополам и создания дополнительного диапазона, но это отправная точка:
var range = window.getSelection().getRangeAt(0),
  content = range.extractContents(),
     span = document.createElement('SPAN');
span.appendChild(content);
var htmlContent = span.innerHTML;
range.insertNode(span);
alert(htmlContent);
К сожалению, я не могу вернуть node обратно, как это было (поскольку вы можете, например, вытащить половину текста из диапазона).
Здесь функция, которая получит вам HTML, соответствующий текущему выбору во всех основных браузерах. Он также обрабатывает несколько диапазонов в пределах выделения (в настоящее время только в Firefox):
function getSelectionHtml() {
    var html = "";
    if (typeof window.getSelection != "undefined") {
        var sel = window.getSelection();
        if (sel.rangeCount) {
            var container = document.createElement("div");
            for (var i = 0, len = sel.rangeCount; i < len; ++i) {
                container.appendChild(sel.getRangeAt(i).cloneContents());
            }
            html = container.innerHTML;
        }
    } else if (typeof document.selection != "undefined") {
        if (document.selection.type == "Text") {
            html = document.selection.createRange().htmlText;
        }
    }
    return html;
}
alert(getSelectionHtml());
		Вот что я придумал. Протестировано с помощью IE, Chrome, Firefox, Safari, Opera. Не возвращает пустую строку.
function getSelected() {
    var text = "";
    if (window.getSelection
    && window.getSelection().toString()
    && $(window.getSelection()).attr('type') != "Caret") {
        text = window.getSelection();
        return text;
    }
    else if (document.getSelection
    && document.getSelection().toString()
    && $(document.getSelection()).attr('type') != "Caret") {
        text = document.getSelection();
        return text;
    }
    else {
        var selection = document.selection && document.selection.createRange();
        if (!(typeof selection === "undefined")
        && selection.text
        && selection.text.toString()) {
            text = selection.text;
            return text;
        }
    }
    return false;
}
		@zyklus:
Я изменил вашу функцию на работу (я использую jQuery, но эти части можно легко переписать в Javascript):
function getSelectionHtml() {
    var htmlContent = ''
    // IE
    if ($.browser.msie) {
        htmlContent = document.selection.createRange().htmlText;
    } else {
        var range = window.getSelection().getRangeAt(0);
        var content = range.cloneContents();
        $('body').append('<span id="selection_html_placeholder"></span>');
        var placeholder = document.getElementById('selection_html_placeholder');
        placeholder.appendChild(content);
        htmlContent = placeholder.innerHTML;
        $('#selection_html_placeholder').remove();
    }
    return htmlContent;
}
		Я нашел highlight плагин, чтобы быть лучшим, он очень легкий, и с его помощью вы можете выделить часть содержание
$('li').highlight('bla');