我正在尝试使用脚本撤消文本区域中的所有大写字母

Posted

技术标签:

【中文标题】我正在尝试使用脚本撤消文本区域中的所有大写字母【英文标题】:I'm tyring to use a script to undo ALL CAPS in my text area 【发布时间】:2013-07-13 13:37:00 【问题描述】:

我有一个以全大写形式接收输入的文本区域,这对大多数用户来说都很好。一些用户需要以规范化方式表示的文本 - 每个句子的第一个字母大写,其余小写。

我尝试从其他 SO 线程中调整一些建议,但缺少一些东西。请帮忙!

身体

<form>
        <input value="Select all" onclick="javascript:this.form.finaltext.focus();this.form.finaltext.select();"  type="button">
        <input value="Clear All" onclick="this.form.finaltext.value=''" type="button">
        <input value="Normalize text" type="button"  id="normalize">
        <a href="#" id="copy-textarea"><input type=button value="Copy to Clipboard"></a><br>
        <br>
        <textarea id="finaltext" cols="80" rows="50"> </textarea>
        </form>

脚本

$(window).load(function()
$('#normalize').click(function capitalizeSentences()

var capText = $("#finaltext").val();
capText = capText.toLowerCase();

capText = capText.replace(/\.\n/g,".[-<br>-]. ");
capText = capText.replace(/\.\s\n/g,". [-<br>-]. ");
var wordSplit = '. ';

var wordArray = capText.split(wordSplit);

var numWords = wordArray.length;

for(x=0;x<numWords;x++) 

    wordArray[x] = wordArray[x].replace(wordArray[x].charAt(0),wordArray[x].charAt(0).toUpperCase());

        if(x==0) 
            capText = wordArray[x]+". ";
        else if(x != numWords -1)
            capText = capText+wordArray[x]+". ";
        else if(x == numWords -1)
            capText = capText+wordArray[x];
                       

capText = capText.replace(/\[-<br>-\]\.\s/g,"\n");
capText = capText.replace(/\si\s/g," I ");  
$("#finaltext").val(capText);
);
);

更新 1 现在脚本可以运行了。

新问题在以下情况下,如何操作 .replace 括号中的逻辑:

我要允许“规范化”的文本区域格式如下:

TEXT1 TEXT2 TEXT3

带有破折号、空格和全部大写的文本。 .replace 逻辑似乎只查找字符串中的第一个字符,但我希望它单独处理每一行(以破折号开头),然后只留下第一个字母大写。

【问题讨论】:

抱歉,当我单击“标准化:”按钮时,什么也没有发生。我在 chrome 的调试器上也没有收到任何错误。 在为它声明事件处理程序时,您的规范化按钮是否在 DOM 中?如果不是,您需要使用 ondelegate 方法 - 例如。 $(document).on('click', '#normalize', function() );我不知道你的页面名称是什么,否则我会将该事件命名为命名空间而不是整个文档。 是的,这是执行点击功能的问题。谢谢。我已经更新了我的脚本。 @user1837608 嘿,我很高兴能帮上忙……我最近在这里过得很艰难。 @Ross 和 OP... 如果这是正确答案,那么罗斯应该将其作为答案而不是评论发布,OP 应该接受它(并且可能会因为它有帮助而投票)和然后,OP 应将新问题作为新问题发布。 【参考方案1】:

我正在接受以下建议并发布解决我的点击问题的更正代码 - 归功于 Ross:

我需要将我的脚本包装在一个 window.load 函数中,以便在渲染后将该函数包含在 DOM 中。

$(window).load(function()
...script...

));

【讨论】:

以上是关于我正在尝试使用脚本撤消文本区域中的所有大写字母的主要内容,如果未能解决你的问题,请参考以下文章

在文本区域中的光标位置之后插入文本

获取文本区域中的光标位置

Chrome 扩展替换当前文本区域中的单词

使用 Ruby on Rails 在文本区域中保留换行符

颜色:在 ie 中的文本上透明(使用覆盖技术突出显示文本区域中的文本)?

在文本区域中添加带有热键和javascript的文本