代码之家  ›  专栏  ›  技术社区  ›  Gabriel

我可以在文本表单输入中检索用户选择的文本吗?

  •  7
  • Gabriel  · 技术社区  · 15 年前

    我试图只获取用户选择的输入字符串的选定部分。假设我有这个输入:

    <input type="text" name="first_name" id="first_name" value="Enter your name" />
    

    用户通过点击并拖动文本字段选择“回车”字。我可以用jquery检索那个文本吗?

    我知道我可以这样得到全部价值:

    $("#first_name").val();
    

    但到目前为止,我还是找不到只获取选定的“回车”部分的方法。有人能给我指出正确的方向吗?谢谢!

    编辑

    我尝试过document.getselection,它在firefox中的静态文本元素(如“p”)上非常有效。到目前为止,它在文本输入方面对我不起作用。

    在IE中,window.selection.createRange().text同时在“p”和文本输入中工作。

    4 回复  |  直到 15 年前
        1
  •  3
  •   heisenberg    15 年前

    应该能够使用jquery的select函数和document.getselection执行此操作

    http://www.devguru.com/Technologies/ecmascript/quickref/doc_getselection.html http://api.jquery.com/select/

        2
  •  2
  •   Pablo Santa Cruz    15 年前

    This 可能会有所帮助。你需要使用 .select() 功能。

        3
  •  1
  •   sgriffinusa    15 年前

    您可以使用常规的javascript替换方法。

    $("#first_name").val().replace("Enter your name", "")
    

    参见一个例子: http://jsfiddle.net/gezDF/

    但是,另一个选项可能是在用户输入字段时删除文本。这可以通过以下方式实现:

    $(document).ready(function(){
        $("#first_name").focus(function () {
             $(this).val("");
        });
    }​);​
    

    参见一个例子: http://jsfiddle.net/JNmAF/

        4
  •  1
  •   Gabriel    15 年前

    好的,这是最后的答案。在处理输入或文本区域时,似乎必须使用SelectionStart和SelectionEnd而不是GetSelection()。这是我的测试代码:

    $(".name").mouseup(function()
    {
        var selected_text = "";
        if (window.getSelection) // Firefox
        {
            var text = $(this).val();
            selected_text = text.substring(document.activeElement.selectionStart, document.activeElement.selectionEnd);
        }
        else // IE
        {
            selected_text = document.selection.createRange().text;
        }
        alert(selected_text);
    });
    

    我的HTML只是:

    <input type="text" name="name" class="name" value="Enter your name" />
    

    所以我终于明白了。感谢大家的投入!