Jason 的代码不能用于 iframe 内的元素(因为范围不同于窗口和文档)。我解决了这个问题,并对其进行了修改,以便用作任何其他 jQuery 插件(可链接):
示例 1:单击选择 <code> 标签内的所有文本并添加类“selected”:
$(function() {
$("code").click(function() {
$(this).selText().addClass("selected");
});
});
示例 2:单击按钮时,选择 Iframe 内的元素:
$(function() {
$("button").click(function() {
$("iframe").contents().find("#selectme").selText();
});
});
注意:记住 iframe 源应该位于同一个域中以防止安全错误。
jQuery 插件:
jQuery.fn.selText = function() {
var obj = this[0];
if ($.browser.msie) {
var range = obj.offsetParent.createTextRange();
range.moveToElementText(obj);
range.select();
} else if ($.browser.mozilla || $.browser.opera) {
var selection = obj.ownerDocument.defaultView.getSelection();
var range = obj.ownerDocument.createRange();
range.selectNodeContents(obj);
selection.removeAllRanges();
selection.addRange(range);
} else if ($.browser.safari) {
var selection = obj.ownerDocument.defaultView.getSelection();
selection.setBaseAndExtent(obj, 0, obj, 1);
}
return this;
}
我在 IE8、Firefox、Opera、Safari、Chrome(当前版本)中对其进行了测试。我不确定它是否适用于较旧的 IE 版本(我真的不在乎)。