【发布时间】:2012-03-06 14:34:13
【问题描述】:
当用户右键单击它时,我正在尝试将<a> 标记附加到选定的文本中。我搜索了堆栈,没有找到匹配项。
【问题讨论】:
标签: jquery append right-click selectedtext
当用户右键单击它时,我正在尝试将<a> 标记附加到选定的文本中。我搜索了堆栈,没有找到匹配项。
【问题讨论】:
标签: jquery append right-click selectedtext
可靠地处理选定的文本跨浏览器有点棘手。 Tim Down 的库Rangy 在那里很有用,他对许多浏览器特性进行了平滑处理。 (即使您不想使用该库,也可以学习它的技术。)
其中一个core Rangy demos 使用the RangyRange#surroundContents method 用一个元素包围选定的文本。演示中的代码如下所示:
function getFirstRange() {
var sel = rangy.getSelection();
return sel.rangeCount ? sel.getRangeAt(0) : null;
}
function surroundRange() {
var range = getFirstRange();
if (range) {
var el = document.createElement("span");
el.style.backgroundColor = "pink";
try {
range.surroundContents(el);
} catch(ex) {
if ((ex instanceof rangy.RangeException || Object.prototype.toString.call(ex) == "[object RangeException]") && ex.code == 1) {
alert("Unable to surround range because range partially selects a non-text node. See DOM Level 2 Range spec for more information.\n\n" + ex);
} else {
alert("Unexpected errror: " + ex);
}
}
}
}
您会做很多相同的事情,但使用 a 而不是 span。
【讨论】:
getSelection 和surroundContents 是如何工作的。这是 Tim 制作 Rangy open source 的喜悦,而不是混淆它。
EDIT注意到您谈论选定的文本有点太晚了。
也许您可以查看document.elementFromPoint,我认为仅在 FireFox 中支持。
你在寻找这样的东西吗:
HTML:
<div id="rightclick">
Right Click me:
</div>
Javascript:
$("#rightclick").mousedown(function(e) {
if (e.which === 3) {
$(this).append("<a href='http://www.google.com'>Link</a>");
}
});
【讨论】: