我的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()。 它给出“无效标签”错误。嗯。
另外,有没有办法以编程方式将所选代码复制到剪贴板?
感谢。
萨姆
答案 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,它就足够简单了。
答案 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并不是一个很好的解决方案)。