js实现的文章输入检查与测速。

在群里聊天,一个群友求助。说要实现 文章对比输入,出错了标红,正确的标绿。 同时还需要统计正确率。

我一开始以为很容易,结果搞了半天。最后折腾出来了。

这里的思路如下:利用js的数组。将文章和输入的内容,都转为数组,一对一进行比对。找到错误的,就修改对应的数组元素。加入Html标签。

代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Examples</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
<script type="text/javascript" src="jquery.js"></script>

<style type="text/css">

    #articleArea{
        width: 100%;
        height: 150px;
        border: 1px solid #000;
        display:none;

    }
    #userinput{
        width: 100%;
        height: 150px;
        border: 1px solid #000;

    }

</style>
</head>
<body>

    <p id="article">鲁迅同时又是20世纪世界文化巨人之一。他创造了内外两面,都和世界的时代思潮合流,而又并未梏亡中国的民族性并具有独特的个人风格的“现今想要参与世界上的事业的中国人”的文学。他与同时期的世界杰出的思想家和文学家一样,在关注本民族的同时,也在关注着人类共同面临的问题,并做出了自己的独特贡献
    </p>

    <textarea id="articleArea" >

    </textarea>

    <textarea id="userinput">
    </textarea>

    <p id="info"></p>

    <script type="text/javascript">

        Date.prototype.format = function(format){
            var o = {
    "M+" : this.getMonth()+1, //month
    "d+" : this.getDate(), //day
    "h+" : this.getHours(), //hour
    "m+" : this.getMinutes(), //minute
    "s+" : this.getSeconds(), //second
    "q+" : Math.floor((this.getMonth()+3)/3), //quarter
    "S" : this.getMilliseconds() //millisecond
    } 

    if(/(y+)/.test(format)) {
        format = format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
    } 

    for(var k in o) {
        if(new RegExp("("+ k +")").test(format)) {
            format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
        }
    }
    return format;
    } 

    //获取p标签的内容

    var articleStr = $("#article").text(); //全局变量
     articleStr = articleStr.replace(/(^\s*)|(\s*$)/g,‘‘);
    var count = 0;//发现的错字数量。

    var start = false; //开始计时。
    var startTime = 0;//开始的时间
    var startTimeStr = "";//开始时间的字符串

    function checkError () {

        //获取输入的字符串
        var userInputstr = $("#userinput").val();
        //去掉空白
        userInputstr.replace(/(^\s*)|(\s*$)/g,‘‘);

        if(userInputstr.length<=1){
            return;
        }

        //开始计时
        if(!start){
            start = true;
            startTime = new Date().getTime();
            startTimeStr = new Date().format("yyyy-MM-dd hh:mm:ss");
        }

        //转换数组
        var userInputarray = new Array();

        for (var i = 0; i < userInputstr.length; i++) {

            userInputarray[i] = userInputstr.charAt(i);
        };

        //用户输入的字符串长度
        var userInputlength = userInputarray.length;

        var articleArray = new Array();

        for (var i = 0; i < articleStr.length; i++) {

            articleArray[i] = articleStr.charAt(i);
        };

        //新建数组保存检查后的结果
        var resultArray = new Array();
        resultArray = articleArray.slice(0); //复制一份

        //2个数组进行对比
        for (var i = 0; i < userInputarray.length; i++) {
            if(userInputarray[i] != articleArray[i]){
                //发现不同。
                count++; //错误字数量增加一个
                //标注错误的字符串。
                resultArray[i] = "<span style=‘background-color:red;‘>"+articleArray[i]+"</span>";

            }else{
                resultArray[i] = "<span style=‘background-color:#00DD00;‘>"+articleArray[i]+"</span>";

            }

        };

        //计算输入速度。
        var endTime = new Date().getTime();
        var spendTime =  parseInt((endTime - startTime)/1000);

        var spendMinute = Math.floor(spendTime/60);
        if(spendMinute<=0){
            spendMinute =1;
        }
        var speed =Math.floor(userInputlength / spendMinute);

        //输出内容
        var result = resultArray.join("");
        var info = "统计信息:";
        info += "开始时间:"+startTimeStr;

        info+="花费时间:"+spendTime+"秒";

        info +="每分钟输入:"+speed;

        info +="已经输入:"+userInputlength;
        info +="正确字数:"+ (userInputlength-count);
        info +="正确率:"+Math.round((userInputlength-count) /userInputlength *100)+"%";

        $("#article").html(result);

        $("#info").html(info);

        //清空
        count ="";

    }

    var timename=setInterval("checkError();",1000);

    </script>

</body>
</html>

主要的js代码:

        Date.prototype.format = function(format){
            var o = {
    "M+" : this.getMonth()+1, //month
    "d+" : this.getDate(), //day
    "h+" : this.getHours(), //hour
    "m+" : this.getMinutes(), //minute
    "s+" : this.getSeconds(), //second
    "q+" : Math.floor((this.getMonth()+3)/3), //quarter
    "S" : this.getMilliseconds() //millisecond
    } 

    if(/(y+)/.test(format)) {
        format = format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
    } 

    for(var k in o) {
        if(new RegExp("("+ k +")").test(format)) {
            format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
        }
    }
    return format;
    } 

    //获取p标签的内容

    var articleStr = $("#article").text(); //全局变量
     articleStr = articleStr.replace(/(^\s*)|(\s*$)/g,‘‘);
    var count = 0;//发现的错字数量。

    var start = false; //开始计时。
    var startTime = 0;//开始的时间
    var startTimeStr = "";//开始时间的字符串

    function checkError () {

        //获取输入的字符串
        var userInputstr = $("#userinput").val();
        //去掉空白
        userInputstr.replace(/(^\s*)|(\s*$)/g,‘‘);

        if(userInputstr.length<=1){
            return;
        }

        //开始计时
        if(!start){
            start = true;
            startTime = new Date().getTime();
            startTimeStr = new Date().format("yyyy-MM-dd hh:mm:ss");
        }

        //转换数组
        var userInputarray = new Array();

        for (var i = 0; i < userInputstr.length; i++) {

            userInputarray[i] = userInputstr.charAt(i);
        };

        //用户输入的字符串长度
        var userInputlength = userInputarray.length;

        var articleArray = new Array();

        for (var i = 0; i < articleStr.length; i++) {

            articleArray[i] = articleStr.charAt(i);
        };

        //新建数组保存检查后的结果
        var resultArray = new Array();
        resultArray = articleArray.slice(0); //复制一份

        //2个数组进行对比
        for (var i = 0; i < userInputarray.length; i++) {
            if(userInputarray[i] != articleArray[i]){
                //发现不同。
                count++; //错误字数量增加一个
                //标注错误的字符串。
                resultArray[i] = "<span style=‘background-color:red;‘>"+articleArray[i]+"</span>";

            }else{
                resultArray[i] = "<span style=‘background-color:#00DD00;‘>"+articleArray[i]+"</span>";

            }

        };

        //计算输入速度。
        var endTime = new Date().getTime();
        var spendTime =  parseInt((endTime - startTime)/1000);

        var spendMinute = Math.floor(spendTime/60);
        if(spendMinute<=0){
            spendMinute =1;
        }
        var speed =Math.floor(userInputlength / spendMinute);

        //输出内容
        var result = resultArray.join("");
        var info = "统计信息:";
        info += "开始时间:"+startTimeStr;

        info+="花费时间:"+spendTime+"秒";

        info +="每分钟输入:"+speed;

        info +="已经输入:"+userInputlength;
        info +="正确字数:"+ (userInputlength-count);
        info +="正确率:"+Math.round((userInputlength-count) /userInputlength *100)+"%";

        $("#article").html(result);

        $("#info").html(info);

        //清空
        count ="";

    }

    var timename=setInterval("checkError();",1000);
    

最后的效果:

时间: 2024-07-30 08:13:24

js实现的文章输入检查与测速。的相关文章

js实现的文章输入检查与测速。(纯js版本)

朋友又提出一些需求.希望不要jquery .于是修改成js版本. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>Examples</title> <meta n

使用js代码获得文章的id号

使用js代码获得文章路径的id号 很多cms都是使用id号串联文章,那么怎样用js获得id号呢? 经过一天的研究,终于有了成果,代码如下: <script> var url = location.href; url = url.match(/\/(\d*).html/); document.write(url[1]); </script> 该代码可以使用另外的js引用. 例如网址:http://www.lc13.cn/yulu/haoju/825.html 能截获/开始,html结

js正则实现用户输入银行卡号的控制及格式化

//js正则实现用户输入银行卡号的控制及格式化 <script language="javascript" type="text/javascript"> function formatBankNo (BankNo){ if (BankNo.value == "") return; var account = new String (BankNo.value); account = account.substring(0,22); /

网址测速JS

/*.route_nav li a:hover{background: #3c7f84 url(title.png) no-repeat;border-color:#84a3a5;}*/ .route_nav li a:hover{background:#3c7f84;border-color:#84a3a5; color:#FFF;} .route_nav li a.line1:hover{background-position: -263px 7px;} .route_nav li a.li

BJSV-P-002高精度测速一体机

测速.抓拍.录像于一体,产品处于行业顶尖水平. 1        测速一体机参数 2       接口和资源 3      相机接口 1.       前面板接口 测速一体机镜头接口采用C-Mount接口,后焦通过预紧环可调,镜头接口及其后截距如下表所示: 2    后面板接口 l         电源接口 分为12V DC和24V AC两种电源输入.其中电源接口的下部接口为12VDC接口,推荐电压12V,允许电压范围为12V±20%.24VAC输入暂不支持. l         数据接口 测速

iOS炫酷动画图案、多种选择器、网络测速、滑动卡片效果等源码

iOS精选源码 对网络进行测速 自实现大标题,配合原生骨架屏demo 简单方便的pickerVIew记录数据 LZPickerView 科技风绘制组件,简单快速"画"出炫酷图案 ResponderChain+Strategy+MVVM实现一个优雅的TableView Card Slider EWAddressPicker.选择中国省市区的自定制地址选择器 EWDatePicker 日期选择器 EWToast.简易Toast提示框 FMDB改进方案YIIFMDB:直接将Model存入数据

网络传输速率及测速方法

网络传输速率概述 根据国家颁布的通信行业标准,固定宽带4M/6M/12M/20M产品及3G网络21M/42M产品公布的速率均是指数据单位比特/秒(bps),而平常用户上网软件或者下载速度指的是字节/秒(Byte/s),二者之间的换算关系为8比特(bit)=1字节(Byte).以4M带宽为例,实际下载速度应该为4M bps除以8(换算单位),约512k Byte/s. 宽带速率介绍  上网速度和所访问的网站(即对端的服务器).电脑性能.距离等有一定关系. 比如访问大英博物馆的资料,速度肯定会慢些.

新路由D1 网件R6400 测速

新路由D1   时不时手机端特价199 R6400      我是399拿下,算是好价格了 D1配置 2.4G 300M 5G 867M,1个千兆wan口,2个千兆lan口,USB3.0和2.0各一个,MT7621A双核处理器,内存256MB,闪存32MB,机身自带8G内存卡. (出于无线干扰等因素的考量,usb3.0是被锁定只可以工作在usb2.0协议上的,通过命令 echo 1 > /proc/usb3_en 可以开启USB3.0的功能) R6400配置 2.4G 450M 5G 1300M

网卡速率低导致测速不达标

今天客户打电话,说有一用户用360测速才600多kb,首先想到的是不是光衰大,查看正常,问有没有接路由器,说是直接连的电脑,检查完所有数据看着一切正常,但是事实摆在那里,速度确实上不来,就让客户远程看一下,进去后先测了一下速,果然600左右,但是长途网络正常,网页打开速度也正常,查看本地连接,忽然发现连接速度是10兆,我擦,赶紧进入网卡配置,更悲催的是他的网卡最多就是10兆,一问才知道用了个外置的网卡,跟客户解释半天,总算过去.以后又多了个检查项,很少注意到速率这块,毕竟现在大部分网卡最低也10