javascript - contenteditable 和非按钮元素

标签 javascript contenteditable

如果使用按钮,我可以轻松地对可编辑的选择执行 execcommand。但是,使用任何其他元素都会失败。

http://jsbin.com/atike/edit

这是为什么,我怎样才能使用 div 元素使其工作。

谢谢。

最佳答案

您可以通过在正在使用的元素上使用 mousedown 事件而不是按钮来保存选择,并在 click 事件中聚焦可编辑元素后再次恢复它。

我修改了示例代码:http://jsbin.com/atike/40/edit .这是代码:

function saveSelection() {
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) {
            var ranges = [];
            for (var i = 0, len = sel.rangeCount; i < len; ++i) {
                ranges.push(sel.getRangeAt(i));
            }
            return ranges;
        }
    } else if (document.selection && document.selection.createRange) {
        return document.selection.createRange();
    }
    return null;
}

function restoreSelection(savedSel) {
    if (savedSel) {
        if (window.getSelection) {
            sel = window.getSelection();
            sel.removeAllRanges();
            for (var i = 0, len = savedSel.length; i < len; ++i) {
                sel.addRange(savedSel[i]);
            }
        } else if (document.selection && savedSel.select) {
            savedSel.select();
        }
    }
}

$(function() {
  var savedSel;

  $('.bold').mousedown(function () {
    savedSel = saveSelection();
  });

  $('.bold').click(function () {
    $('#hello').focus();
    if (savedSel) {
      restoreSelection(savedSel);
    }
    document.execCommand("bold", false, null);    
  });
});

关于javascript - contenteditable 和非按钮元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1479784/

相关文章:

javascript - Dojo "On"复选框更改内部 For 循环范围问题

javascript - 如何不通过引用将 JavaScript 对象复制到新变量?

javascript - Angular 拦截器排除特定 url

html - 粘贴的 HTML 是否保证经过清理?

javascript - 检测浏览器是否支持 contentEditable?

html - 在没有异物的情况下模拟 SVG 中可编辑的内容

javascript - 基于另一个数组的选择过滤数组

javascript - 从代码中填写网站上的表格

javascript - Tablesorter 总是在内容编辑后重新加载第一页

javascript - Html5内容可编辑添加视频