<a>
当用户右键单击它时,我正在尝试将标签附加到选定的文本中。我搜索了堆栈,没有找到匹配项。
问问题
1290 次
2 回答
5
可靠地处理选定的文本是一个有点棘手的跨浏览器。Tim Down 的库Rangy在那里很有用,他解决了很多浏览器的特性。(即使您不想使用该库,也可以学习它的技术。)
Rangy的核心演示之一是用一个元素包围选定的文本,使用RangyRange#surroundContents
方法. 演示中的代码如下所示:
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);
}
}
}
}
你会做同样的事情,但是使用 aa
而不是 a span
。
于 2012-02-15T08:48:25.220 回答
0
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>");
}
});
查看演示:http: //jsfiddle.net/BgW7x/2/
于 2012-02-15T08:50:45.347 回答