使用jquery在文本框外部获取所选文本

时间:2010-09-13 14:44:10

标签: javascript jquery html

是否可以在文本框外检索所选文本? 我见过从输入表单和textareas获取文本的解决方案,类似于: http://laboratorium.0xab.cd/jquery/fieldselection/0.2.3-test/test.html 但这可以在HTML文本(div元素内)中使用吗?

例如,我希望用户能够加粗选择不在textarea中的文本。

2 个答案:

答案 0 :(得分:4)

是的,这是可能的。 IE和其他浏览器具有相当不同的机制来处理选择。如果您只想要所选文本,则以下内容将执行此操作:

function getSelectedText() {
    var text = "";
    if (window.getSelection) {
        text = "" + window.getSelection();
    } else if (document.selection && document.selection.createRange &&
            document.selection.type == "Text") {
        text = document.selection.createRange().text;
    }
    return text;
}

要解决您的具体问题,您可以使用document.execCommand("bold", null, false);将当前选择设为粗体。在非IE浏览器中,您必须首先暂时将文档置于编辑模式:

function toggleSelectionBold() {
    var range, sel;
    if (window.getSelection) {
        // Non-IE case
        sel = window.getSelection();
        if (sel.getRangeAt) {
            range = sel.getRangeAt(0);
        }
        document.designMode = "on";
        if (range) {
            sel.removeAllRanges();
            sel.addRange(range);
        }
        document.execCommand("bold", null, false);
        document.designMode = "off";
    } else if (document.selection && document.selection.createRange &&
            document.selection.type != "None") {
        // IE case
        range = document.selection.createRange();
        range.execCommand("bold", null, false);
    }
}

答案 1 :(得分:1)

要在文档的任何部分中获取所选文本,您可以使用window.getSelectiondocument.getSelectiondocument.selection。如果要实现交叉兼容性,则应尝试以上各项,例如:

if (window.getSelection) {
  window.getSelection();
} else if (document.getSelection) {
  document.getSelection();
} else if (document.selection) {
  document.selection.createRange().text;
}