大写字母在textarea中选择文本

时间:2015-03-30 15:17:15

标签: javascript jquery uppercase getselection

尝试运行以下代码时出现undefined is not a function错误:

$(document).ready(function() {
    $("#textarea").select(function() {
        var selection = window.getSelection();
        $("#upper").click(function() {
            // alert(selection);
            var upper = selection.toUpperCase();
            var text = $("#textarea").text();
            $("#textarea").html(text.replace(selection, upper));
        });
    }); 
});

我尝试从textarea中选择文本,然后单击按钮使选择大写。这是完整代码的JSFiddle

1 个答案:

答案 0 :(得分:4)

getSelection返回一个对象。您需要在其上调用toString()

$(document).ready(function () {
    var selection;
    $("#textarea").select(function () {
        selection = window.getSelection().toString();
    });
    $("#upper").click(function () {
        if (selection) {
            var upper = selection.toUpperCase();
            var text = $("#textarea").text();
            $("#textarea").html(text.replace(selection, upper));
        }
    });
});

JSFiddle:http://jsfiddle.net/TrueBlueAussie/8syb2d8j/4/

注意:

  • 你的事件处理程序是嵌套的(通常是一个坏主意)
  • 我添加了一项检查,以确保在尝试对其进行操作之前有一个选择。
  • 因为,您突出显示的文字可能不止一个,使用replace实际上并不是一个很好的解决方案。尝试突出显示第二个i,看看我的意思。您应该使用选择对象的属性来计算所选字符串的确切部分

在浏览了便携式解决方案之后,我发现了基于jQuery TextRange pluginthe demo {{3}}对于此问题已经足够了。