17

我有一个 jQuery 对话框,用于在 contentEditable 范围内创建链接。问题是单击按钮打开对话框会导致选择丢失,对话框内的文本输入也会导致选择丢失。

我可以使用 -moz-user-select:none; 修复按钮 但是 -webkit-user-select:none 在 Chrome 中不起作用。

我可以通过将输入包装在 iframe 中来修复输入,但这很麻烦,单击其他任何地方也会终止选择,例如,拖动对话框。

在打开 jQuery 对话框时如何保留文本选择中看到了解决方案,但这在许多浏览器中的 contenteditable 元素中不起作用,只有真正的输入。

我的问题有很好的解决方案吗?

4

1 回答 1

42

当对话框打开和关闭时,您可以使用以下简单功能保存和恢复选择。我对 jQuery 对话框不够熟悉,不知道挂钩到对话框打开和关闭的机制。第一个saveSelection,返回你一个RangeTextRange对象,你应该存储在一个变量中,你稍后传递给restoreSelection

function saveSelection() {
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) {
            return sel.getRangeAt(0);
        }
    } else if (document.selection && document.selection.createRange) {
        return document.selection.createRange();
    }
    return null;
}

function restoreSelection(range) {
    if (range) {
        if (window.getSelection) {
            sel = window.getSelection();
            sel.removeAllRanges();
            sel.addRange(range);
        } else if (document.selection && range.select) {
            range.select();
        }
    }
}
于 2010-07-23T08:23:17.690 回答