使用javascript按下开始按钮时,我应该如何突出显示textarea中的文本?

Posted

技术标签:

【中文标题】使用javascript按下开始按钮时,我应该如何突出显示textarea中的文本?【英文标题】:How should i highlight a text in textarea when press start button using javascript? 【发布时间】:2015-08-15 21:54:58 【问题描述】:

我是 javascript 的初学者。

有人可以帮我吗?

当按下星号按钮时,如何用背景突出显示 Textarea 的文本。当点击停止时,光标应该以突出显示的背景停止。

当按下停止按钮时,它会显示字数,行数。

例如:

按下两个按钮之间的时间将为我们提供用户阅读所需的时间。 并且因为文本区域有字数,可以计算出“阅读速度” 例如: 每分钟 120 个单词,即每秒 2 个单词。 10分钟1200字。

我是这样计算的。 假设书页通常具有: 30 行 * 每行 8 个字 也就是每页 240 个字 时间 600 页 总共有 144,000 个单词 除以每分钟 120 字的阅读速度 也就是 1200 分钟 每小时除以 60 分钟:20 小时

以下链接与我的问题有关。但是文本已将文本突出显示到另一个文本区域中。我想突出显示同一文本框中的文本。

How to highlight text in TextArea

这是我的html代码:

<div id="startbtn">
<button id="start" onclick="startHighlight()">Start!</button>
</div>
<div id="stoptbtn">
<button id="stop" onclick="stopHighlight()">Stop!</button>
</div>        
<div id="container">
<textarea id="inputText"></textarea>
</div>

【问题讨论】:

“突出显示”是指“选择”吗? “光标”是指“插入符号”吗?光标是鼠标指针。您没有显示您尝试过的任何代码,并且您链接到的答案是“您不能这样做”。 ***.com/questions/5797539/…请参考这里。 嗨@raz。按开始按钮时,一一选择单词。 哇...好问题...使用阅读所需的时间。 他基本上想要一个阅读模拟,从按下“开始按钮”开始 -> 触发的事件应该逐字突出显示,直到按下“停止按钮”。之后,突出显示的单词应该一起计算,并且应该解析出经过的时间 【参考方案1】:

最新更新: 阅读模拟器现在根据用户输入速度和单词长度读取每个单词,以提供更真实的阅读流程。 https://jsfiddle.net/8Lwm6gh1/40/

js的源代码:

更新代码

  $('#sim').each(function()
    this.contentEditable = true;
);

var go = $('#go');
var stop = $('#stop');
var wordCount = 0;
var wordCountBox = $('#wordCountBox');
var timepassed = $('#timepassed');
var textRead = $('#textRead');
var small = $('small');


go.on("click", function(e)
    e.preventDefault();
    startSim();
);

function startSim()
    var speed = $('#speed').val();
    timeStart = $.now();
    var sim = $('#sim').text();
    var wordArray = sim.split(" ");
    var simWrap = $('#sim');
    var loopCount = 0;

    var arrCount = wordArray.length;
    var alreadyRead = [];
    loopDat();
    var i = loopCount;    
    function loopDat()
            var pos = loopCount;
            var realSpeed = wordArray[pos].length;
            realSpeed = (realSpeed * (speed / 5));
            // realSpeed = Math.round((realSpeed * 0.1) * speed);
            console.log('Reading speed of current word: '+realSpeed);
            if(loopCount == pos)
                setTimeout(function()  
                    if(pos < 0)
                        pos = 0;
                    
                    alreadyRead.push(wordArray[pos]);
                    wordArray[pos] = '<b>'+wordArray[pos]+'</b>';
                    small.text('Current reading speed: '+realSpeed);
                    var words = wordArray.join(" ");
                    simWrap.html(words);                
                    wordCount++;
                    if(pos == (arrCount - 1))
                        triggerDone();
                    
                    loopCount++;
                    if(loopCount < arrCount)
                        loopDat();
                    
                , realSpeed);
            
    
    // Function done
    function triggerDone()
        wordCountBox.text('Words counted: '+wordCount);
        var timeEnd = $.now();
        var timeRes = timeEnd - timeStart;
        timeRes = parseInt(timeRes);
        timeRes = timeRes / 1000;
        timepassed.text(timeRes+" seconds have passed");
        alreadyRead = alreadyRead.join(" ");
        textRead.text(alreadyRead);
        var summary = $('#summary');
        summary.show();
        return;
     
    stop.on("click", function(e)
        e.preventDefault();
        triggerDone();
    );

【讨论】:

嗨@noa-dev,首先,感谢您的回复。它仅在 JSfiddle 中工作。无法在浏览器中运行。 它也可以在浏览器中使用——在这种情况下我使用的是 jquery。 google jquery 并在脚本之前将其实现到您的 是的,现在工作很酷。谢谢@noa-dev。当我使用超过 100 个单词时,溢出单词。最好是textarea,但是当我使用textarea时,字数只显示1。 如果文本框现在有太多文本,文本框会出现滚动条。 jsfiddle.net/8Lwm6gh1/38 PS下次当您提出问题时,请先尝试使用基本的 javascript 教程等自己解决问题 - 除了我的以外,您没有得到任何答案,因为您自己所做的只是编写一个需要 1 分钟的 html 标记;) 好的。谢谢你我添加了溢出:自动;在#sim 类中。现在好了。

以上是关于使用javascript按下开始按钮时,我应该如何突出显示textarea中的文本?的主要内容,如果未能解决你的问题,请参考以下文章

我应该/如何使用 .slice() 在按下按钮时交换图像 scr? (用于画廊中的下一个/上一个按钮)

当用户尝试按下后退按钮或使用 Firefox 时,如何添加警报? (Javascript)

如何使用开始和停止 UIButtons 连续跟踪位置坐标并查找距离 [关闭]

在 PyQt5 中按下时如何切换按钮文本

使用 AlertDialog 调用函数

按下按钮时使用Javascript刷新div内容