Как я могу получить элемент DOM, который содержит текущий выбор?

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

Другая проблема с контролируемыми исключительными ситуациями состоит в том, что они имеют тенденцию неправильно использоваться. Идеальный пример этого находится в java.sql.Connection close() метод. Это может бросить SQLException , даже при том, что Вы уже имеете , явно указал , что Вы сделаны с Соединением. Что могла закрыть информация (), возможно передают это, Вы заботились бы о?

Обычно, когда я закрываю () соединение *, оно выглядит примерно так:

try {
    conn.close();
} catch (SQLException ex) {
    // Do nothing
}

кроме того, не запускайте меня на различных методах синтаксического анализа и NumberFormatException... TryParse.NET, который не выдает исключения, настолько легче использовать, это болезненно для возвращения к Java (мы используем и Java и C#, где я работаю).

* Как дополнительный комментарий, Connection.close PooledConnection () не делает даже близкий соединение, но все еще необходимо поймать должное SQLException к нему являющийся контролируемой исключительной ситуацией.

34
задан Aaron Digulla 26 August 2009 в 14:47
поделиться

2 ответа

In IE, use document.selection.createRange().parentElement() and in real browsers use window.getSelection().getRangeAt(0).startContainer.parentNode. Something like this:

function getSelectedNode()
{
    if (document.selection)
        return document.selection.createRange().parentElement();
    else
    {
        var selection = window.getSelection();
        if (selection.rangeCount > 0)
            return selection.getRangeAt(0).startContainer.parentNode;
    }
}
35
ответ дан 27 November 2019 в 16:13
поделиться

Следующий код вернет контейнер элемент начальной или конечной границы текущего выделения, используя логическое значение isStart , чтобы указать, хотите ли вы начальная или конечная граница. Он будет работать в большинстве основных браузеров. Добавьте тесты функций для большей надежности.

function getSelectionBoundaryElement(isStart) {
    var range, sel, container;
    if (document.selection) {
        range = document.selection.createRange();
        range.collapse(isStart);
        return range.parentElement();
    } else {
        sel = window.getSelection();
        if (sel.getRangeAt) {
            if (sel.rangeCount > 0) {
                range = sel.getRangeAt(0);
            }
        } else {
            // Old WebKit
            range = document.createRange();
            range.setStart(sel.anchorNode, sel.anchorOffset);
            range.setEnd(sel.focusNode, sel.focusOffset);

            // Handle the case when the selection was selected backwards (from the end to the start in the document)
            if (range.collapsed !== sel.isCollapsed) {
                range.setStart(sel.focusNode, sel.focusOffset);
                range.setEnd(sel.anchorNode, sel.anchorOffset);
            }
       }

        if (range) {
           container = range[isStart ? "startContainer" : "endContainer"];

           // Check if the container is a text node and return its parent if so
           return container.nodeType === 3 ? container.parentNode : container;
        }   
    }
}
57
ответ дан 27 November 2019 в 16:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: