如何让这段代码在IE中运行?

时间:2009-10-01 07:23:14

标签: javascript internet-explorer copy clipboard

我的HTML页面中有很多表。 当用户在桌面上悬停时,应自动选择它(onmouseover事件),以便用户可以将其(Ctrl + v)复制到剪贴板。 我在stackoverflow中搜索了一种方法,最后得到了以下代码。 但它只适用于Firefox(window.getSelection()在IE中不起作用)。 如何让它在IE中运行?

  var prevRange = null;

  function s(node) {
    var s = window.getSelection();
    var r = document.createRange();
    r.selectNode(node);
    if (prevRange) {
      s.removeRange(prevRange);
    }
    s.addRange(r)
    prevRange = r;
  }

由于某些未知原因,我无法在FF中使用s.removeAllRanges()。 它给出“无效标签”错误。嗯。

另外,有没有办法以编程方式将所选代码复制到剪贴板?

感谢。

萨姆

5 个答案:

答案 0 :(得分:1)

以下功能可以满足您的需求。不需要jQuery。

我在Firefox中看到removeAllRanges没问题。您需要提供更多代码来说明问题。

您将无法将用户选择直接复制到剪贴板,如另一个答案中所述。大多数浏览器都不允许它。

function selectElement(el) {
    var sel, range;

    // IE branch
    if (document.body.createTextRange) {
        range = document.body.createTextRange();
        range.moveToElementText(el);
        range.select();
    } 

    // DOM compliant browsers
    else if (window.getSelection && document.createRange) {
        sel = window.getSelection();
        range = document.createRange();
        range.selectNodeContents(el);
        sel.removeAllRanges();
        sel.addRange(range);
    }
}

答案 1 :(得分:0)

使用像jQuery这样的库来帮助处理浏览器怪癖可能是值得的。如果你知道基本的javascript,它就足够简单了。

http://jquery.com/

答案 2 :(得分:0)

这只是为了显示在IE中使用哪种方法以及使用其他浏览器时,它目前还不是一个完整的解决方案,至少包含一个逻辑陷阱。

var s;
if (window.getSelection) {
    s = window.getSelection();
}
else if (document.selection) {
    s = document.selection.createRange();
}

应该是IE中的文本范围,而它仍然是基于Mozilla的浏览器中的选择对象。

此处的信息:http://www.quirksmode.org/dom/range_intro.html

编辑:编辑澄清。 =)

答案 3 :(得分:0)

This是一篇很好的文章,解释了大多数常见浏览器之间的范围差异,并提供了有用的提示来克服它们。

答案 4 :(得分:0)

关于getSelection,这已由J. Steen回答,

var s;
if (window.getSelection) {
    s = window.getSelection();
}
else if (document.selection) {
    s = document.selection.createRange();
}

关于以编程方式将所选文本复制到剪贴板,由于安全原因,这在Firefox中不起作用。有一些解决方法,但最终用户需要更改一些设置。 Java applet可用于以编程方式在Firefox中复制文本(但是,applet并不是一个很好的解决方案)。