Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较两个客户端类型的文本字段jQuery

比较两个客户端类型的文本字段jQuery
EN

Stack Overflow用户
提问于 2013-03-29 16:02:05
回答 3查看 2.7K关注 0票数 16

我的jQuery“比较”功能有一些问题。它的任务是比较两个文本区域并突出显示差异。

例如:在一个文本区域中显示“我的名字是Michael”,在另一个文本区域中显示“我的名字是Michel”。

我的函数将返回两个输入并突出显示第一个输入中的字符"a“,并突出显示第二个输入中缺少的字符。

到目前为止,这个函数看起来是这样的,但它似乎并不是100%有效。

代码语言:javascript
运行
AI代码解释
复制
$(function () {

$('#btnCompare').on('click', function () {
    compare();
});

function compare() {
    $('#divColLeft').empty();
    $('#divColRight').empty();
    var textOne = $('#taOneComp').val();
    var textTwo = $('#taTwoComp').val();

    var output;
    var outputX;

    var arrTextOne = [];
    var arrTextTwo = [];

    for (var i = 0; i < textOne.length; i++) {
        output = textOne.charAt(i);
        arrTextOne.push(output);
    }
    for (var x = 0; x < textTwo.length; x++) {
        outputX = textTwo.charAt(x);
        arrTextTwo.push(outputX);
    }

    $.each(arrTextOne, function (y, e) {
        if ($.inArray(e, arrTextTwo) == -1) {
            $('#divColLeft').append(e);
            $('#divColLeft').highlight(e);
        } else {
            $('#divColLeft').append(arrTextOne[y]);
        }
    });

    $.each(arrTextTwo, function (z, f) {
        if ($.inArray(f, arrTextOne) == -1) {
            $('#divColRight').append(f);
            $('#divColRight').highlight(f);
        } else {
            $('#divColRight').append(arrTextTwo[z]);
        }
    });
}

});

更新:更精确并改进原始问题

如果有些文本在两个文本中的任何一个文本之前包含字符"a“,这是一个应该突出显示的差异。在第一个文本中,"a“应该突出显示,在第二个文本中,我想输入一个空格来突出显示差异(缺少的字符)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-07 19:56:25

只有当两个字符串具有完全相同的长度和相同的单词排列时,您的代码才能正常工作,否则它将崩溃,即如果您在测试字符串的开头添加额外的字符。

经过一些编码后,我设法想出了下面的代码,它比较两个字符串,并找到缺少的字符/单词,额外的字符/单词和错误的拼写:

代码语言:javascript
运行
AI代码解释
复制
function compare() {
    var elm1 = document.getElementById("div1"),
        elm2 = document.getElementById("txt"),
        output = document.getElementById("div2"),
        txt1 = elm1.innerHTML,          //original text
        txt2 = elm2.value,              //submitted text
        arr1 = txt1.split(" "),         //split original text to array of words
        arr2 = [];                      //miss matching words will be added here

//filter txt1 and txt2 from matching words and add miss matching to arr2///////
    for (var i in arr1) {
        var match = txt2.match(new RegExp("\\b" + arr1[i] + "\\b"));
        if (match) {
            txt2 = txt2.replace(new RegExp("\\s?" + arr1[i]), "");
            txt1 = txt1.replace(new RegExp("\\s?" + arr1[i]), "");
        } else if (!match) {
            arr2.push(arr1[i]);
        }
    }
//compare miss matching words from original and submitted text, if matching charachters is more that 50% highlight missing and extra characters
    var arr3 = txt2.split(" "), //convert filtered submitted text to words array
        right = elm1.innerHTML,
        wrong = elm2.value;
    for (var a in arr2) {
        for (var b in arr3) {
            var match2 = arr3[b].match(new RegExp("[" + arr2[a] + "]", "g")),
                t = (arr2[a].length > arr3[b].length) ? arr2[a].length : arr3[b].length;
            if (match2 && match2.length >= t * 0.5) { //check for words that look similar
                txt2 = txt2.replace(new RegExp("\\s?" + arr3[b]), "");
                txt1 = txt1.replace(new RegExp("\\s?" + arr2[a]), "");
                var str1 = "",
                    str2 = "",
                    n = 0;
                for (var c = 0; c < t; c++) {
                    if (arr2[a].charAt(c) === arr3[b].charAt(c + n)) {
                        str1 += arr3[b].charAt(c + n);
                        str2 += arr2[a].charAt(c);
                    } else if (arr2[a].charAt(c) !== arr3[b].charAt(c + n)) {
                        if(arr2[a].charAt(c + 1) == arr3[b].charAt(c + n)){
                            str2 += arr2[a].charAt(c).fontcolor("blue");
                            str1 += "_".fontcolor("red");
                            n--;
                        }else if(arr2[a].charAt(c) == arr3[b].charAt(c + n + 1)){
                            str1 += arr3[b].charAt(c + n).fontcolor("orange");
                            n++;
                            c--;
                        }else{
                            str1 += arr3[b].charAt(c + n).fontcolor("red");
                            str2 += arr2[a].charAt(c).fontcolor("green");
                        }
                    }
                }
                wrong = wrong.replace(arr3[b], str1);
                right = right.replace(arr2[a], str2);
            }
        }
    }
//check for extra words//////////////////////////////////////
    extra = txt2.split(" ");
    for(var d in extra){
        wrong = wrong.replace(extra[d], extra[d].fontcolor("grey"));
    }
//check for missing words//////////////////////////////////////
    missing = txt1.split(" ");
    for(var f in missing){
        right = right.replace(missing[f], missing[f].fontcolor("blue"));
    }
    output.innerHTML = wrong;
    elm1.innerHTML = right;
}

DEMO

工作原理:

  1. 比较原始文本和提交的文本并查找匹配的单词并将其删除如果两个单词看起来相似(等于字符总数的50% ),则将两个字符串中的其余单词作为缺少/额外/拼写错误的字符进行比较并将其突出显示。
  2. => remaining in the original text as missing words
  3. Highlight

remaining words in the submitted text as extra words G219>

票数 7
EN

Stack Overflow用户

发布于 2013-04-09 08:25:55

我的代码将第一个文本区域的单词与第二个文本进行比较示例..first文本区域文本是'How are words.For‘,第二个文本区域文本是'I am fine’。它将比较'how‘与'I’以及'are‘与’am‘。请试用此code...My

代码语言:javascript
运行
AI代码解释
复制
  $(function () {

            $('#btnCompare').on('click', function () {
                compare();
                return false;
            });

            function compare() {
                $('#divColLeft').empty();
                $('#divColRight').empty();

                var textOne = $.trim($('#taOneComp').val());
                var textTwo = $.trim($('#taTwoComp').val());

                var TempArr1 = textOne.split(' ');
                var TempArr2 = textTwo.split(' ');
                var arr1 = [];
                for (var i = 0; i < TempArr1.length; i++) {
                    if (TempArr1[i] !== "" && TempArr1[i] !== null) {
                        arr1.push(TempArr1[i]);
                    }
                }

                var arr2 = [];
                for (var i = 0; i < TempArr2.length; i++) {
                    if (TempArr2[i] !== "" && TempArr2[i] !== null) {
                        arr2.push(TempArr2[i]);
                    }
                }
                var minArrLen = arr1.length < arr2.length ? arr1.length : arr2.length;

                for (var x = 0; x < minArrLen; x++) {

                    var maxCharLen = arr1[x].length > arr2[x].length ? arr1[x].length : arr2[x].length;
                    for (var y = 0; y < maxCharLen; y++) {
                        if (arr1[x].charAt(y) == ' ') {
                            $('#divColLeft').append('<span  class="missing">' + arr2[x].charAt(y) + '</span>');

                            $('#divColRight').append('<span class="missmatch">' + arr2[x].charAt(y)) + '</span>';
                        }
                        else if (arr2[x].charAt(y) == ' ') {
                            $('#divColLeft').append('<span class="missing">' + arr1[x].charAt(y) + '</span>');

                            $('#divColRight').append('<span class="missmatch">' + arr1[x].charAt(y)) + '</span>';
                        } else if (arr1[x].charAt(y) == arr2[x].charAt(y)) {
                            $('#divColLeft,#divColRight').append(arr1[x].charAt(y));
                        }
                        else {
                            $('#divColLeft').append('<span  class="missmatch">' + arr1[x].charAt(y) + '</span>');
                            $('#divColRight').append('<span  class="missing">' + arr2[x].charAt(y) + '</span>');
                        }
                    }
                    $('#divColLeft').append(' ');
                    $('#divColRight').append(' ');
                }

                if (minArrLen < arr1.length) {
                    for (var Len = minArrLen; Len < arr1.length; Len++) {
                        $('#divColLeft').append(arr1[Len])
                                        .append(' ');
                    }
                } else if (minArrLen < arr2.length) {
                    for (var Len = minArrLen; Len < arr2.length; Len++) {
                        $('#divColRight').append(arr2[Len])
                                        .append(' ');
                    }
                }
            }
        });
票数 0
EN

Stack Overflow用户

发布于 2013-04-02 18:37:33

代码语言:javascript
运行
AI代码解释
复制
$(document).ready(function () {

  $('#btnCompare').on('click', function () {
      compare();
  });

  function compareText(textOne, textTwo)
  {
      var len = Math.min(textOne.length, textTwo.length);
      for (var i=0;i<len; i++)
      {
          if (textOne.charAt(i) == textTwo.charAt(i)) continue;

          return i;      // this character is different
      }

      if (textOne.length == textTwo.length) return -1;    // same

      return i;
  }

  function compare() {
      $('#divColLeft').empty();
      $('#divColRight').empty();
      var textOne = $('#taOneComp').val();
      var textTwo = $('#taTwoComp').val();

      var diffIndex = compareText(textOne, textTwo);
      if (diffIndex == -1)
      {
          // TODO: tell user they are identical
          $('#divColLeft').html('Identical');

      } else {

          // if textTwo has more characters, 
          // add a dummy character for highlighting to textOne

          if (diffIndex >= (textOne.length)) textOne += '_';

          var char = textOne.charAt(diffIndex);

          // highlight differing character

          var tmpLeft = textOne.substring(0, diffIndex);
          tmpLeft += "<span style='background-color:yellow;font-weight:bold'>" + char + "</span>";
          tmpLeft += textOne.substring(diffIndex+1);

          $('#divColLeft').html(tmpLeft);
      }
  }
});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15706827

复制
相关文章
mysql中的字段 TEXT类型区别、用于存储比较大文本字段
TEXT :一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。  
学到老
2019/02/14
5.7K0
mysql 字段时间类型的比较
字段的时间类型分为: ,,,,; 下面就分别介绍这几种时间类型的区别 每个时间类型都有一个有效范围和一个零值,当指定的类型的值超过有效范围时,就会使用零值 YEAR 该类型表示年,格式为 有三种表示方法 直接使用四位数字或字符串,范围是1901-2155,输入的格式为’YYYY’或YYYY,如输入‘2011’或2011就回直接保存为2011,若超过范围就会表示为0000 使用两位的字符串表示,如果插入为’00’-‘69’则表示为2000-2069,若插入’70-99’则表示为1970-1999.如输入’
企鹅号小编
2018/02/08
4.8K0
mysql 字段时间类型的比较
jquery判空 string类型的日期比较大小
if(value.length<=0){ alert("kongzhi"); }
yuanyuan
2019/09/10
1.8K0
常用的数据库的字段类型及大小比较_sql字段长度
ORACLE的数据类型 常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 最大长度2000 bytes ` VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749 NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 经过严格测试,无千虫问题 LONG 超长字符串 最大长度2G(231-1) 足够存储大部头著作 RAW 固定长度的二进制数据 最大长度2000 bytes 可存放多媒体图象声音等 LONG RAW 可变长度的二进制数据 最大长度2G 同上 BLOB 二进制数据 最大长度4G CLOB 字符数据 最大长度4G NCLOB 根据字符集而定的字符数据 最大长度4G BFILE 存放在数据库外的二进制数据 最大长度4G ROWID 数据表中记录的唯一行号 10 bytes **.*.*格式,*为0或1 NROWID 二进制数据表中记录的唯一行号 最大长度4000 bytes NUMBER(P,S) 数字类型 P为整数位,S为小数位 DECIMAL(P,S) 数字类型 P为整数位,S为小数位 INTEGER 整数类型 小的整数 FLOAT 浮点数类型 NUMBER(38),双精度 REAL 实数类型
全栈程序员站长
2022/10/04
4.2K0
常用的数据库的字段类型及大小比较_sql字段长度
利用反射比较两个对象字段值是否相等
import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Map;import org.apache.log4j.Logger;public class DomainEquals { /** * 日志操作类 */ private static Logger logger = Logger.getLogger(Domain
java达人
2018/01/31
3.7K0
批量比较两个PDF文档(PDFUtil通过文本/者图像进行比较)
在我的项目中,我需要比较大量的PDF文档,确认两份PDF文档是否一致,如果仅仅凭借着手动去逐一比较,可能很快就阵亡了。另外也有一些软件可以辅助的去对比,但依然是手动。
软测小生
2020/11/10
3.1K1
批量比较两个PDF文档(PDFUtil通过文本/者图像进行比较)
sql中datetime日期类型字段比较(mysql&oracle)
mysql 可以直接用大于号,也可以用  between  and SELECT * FROM users WHERE UPDATE_DATE >= '2021-08-12 11:22:09' AND UPDATE_DATE <= '2021-08-15 11:22:33'; SELECT * FROM users WHERE UPDATE_DATE BETWEEN '2021-08-12 11:22:09' AND '2021-08-15 11:22:33'; Oracle oracle sql日期比较
红目香薰
2022/11/29
3.7K0
MySQL的字段类型_mysql数据库字段类型
要了解一个数据库,我们必须了解其支持的数据类型。MySQL 支持大量的字段类型,其中常用的也有很多。前面文章我们也讲过 int 及 varchar 类型的用法,但一直没有全面讲过字段类型,本篇文章我们将把字段类型一网打尽,讲一讲常用字段类型的用法。
全栈程序员站长
2022/10/04
20.4K0
MySQL的字段类型_mysql数据库字段类型
mysql密码字段类型_MySQL 字段类型
MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。
全栈程序员站长
2022/11/17
15.4K0
mysql密码字段类型_MySQL 字段类型
oracle数据库文本类型_oracle修改字段数据类型
insert into courses values(‘ss01′,’.NET’,0,TO_DATE(‘2009-8-28′,’yyyy-mm-dd’),94)
全栈程序员站长
2022/10/04
6270
java中利用hanlp比较两个文本相似度的步骤
使用 HanLP - 汉语言处理包 来处理,他能处理很多事情,如分词、调用分词器、命名实体识别、人名识别、地名识别、词性识别、篇章理解、关键词提取、简繁拼音转换、拼音转换、根据输入智能推荐、自定义分词器
IT小白龙
2019/05/06
3.1K0
java中利用hanlp比较两个文本相似度的步骤
比较实用的jQuery代码段
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
奋飛
2019/08/15
1.8K0
MySQL字段类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
全栈程序员站长
2022/08/04
10K0
字段与属性的总结与比较
(3)当字段需要为外部提供数据时,将字段封装为属性,而不是公有化字段(即使用public)
wfaceboss
2019/04/08
7330
blob类型字段[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/16
3K0
MySQL 中不要拿字符串类型的字段直接与数字进行比较
在进行数据清理的时候,需要对值为 0 的行进行清理,然后直接与数字 0 进行了对比,然后发现大部分的行都会被删除了,百思不得其解。🤔 后来经过排查,发现在 MySQL 查询中,'abc' 和 '0' 比较结果显然是不等的,但如果 'abc' 和 0 比较呢?结果居然是相等的。 在 MySQL 官方文档中关于比较的章节中: Strings are automatically converted to numbers and numbers to strings as necessary 也就是说:在比较的时候
Denis
2023/04/14
1.7K0
jQuery控制控件文本的长度
文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书
Tyan
2022/05/09
1.4K0
文本相似比较
大家好,我是数说君,这篇文章是想跟大家讨教一下。 如果有两段简单文本,如何比较它们的相似度?这里我们就假设是英文,不存在中文的分词问题,文本就类似于: text1 = 'hello, I am shushuo jun' text2 = 'hi, wo ye shi shushuo jun' 目前比较容易实现的,是计算出每个文本的词向量,然后将两列词向量进行比较,计算出相似度,实现比较简单,就不上code了。我在python中,计算出上面的text1和text2的相似度是51%。 但问题是: 这样的比较是以词
数说君
2018/04/08
1.2K0
vue 文本比较插件
最近需要加个统计日志功能,想着能把当前版本和上一版本列出来做比较,所以想到了找个对比插件,期间试过自己通过js实现,但很费事效果不理想,之后找了 https://github.com/ddchef/vue-code-diff 这个感觉也不是很合适。最终选用的下边这个,不过左右替换的功能不需要,不知如何去掉,有知道的麻烦留言告知。
用户1409099
2019/05/14
4.4K0
Integer类型比较的问题
工作几年了,居然还是出现这个问题,最近做websocket通信,其中在SystemWebSocketHandler类中的一个代码片段,判断条件如下: /** * 给当前组发消息 * @Author 张志朋 * @param session * @param message void * @Date 2016年8月9日 * 更新日志 * 2016年8月9日 张志朋 首次创建 * */ @Supp
小柒2012
2018/04/13
1.2K0

相似问题

使用jQuery比较两个文本字段的值

20

比较两个文本字段的文本

10

如何使用jquery比较两个文本输入类型框值

50

jQuery验证:比较两个字段

30

jquery比较两个字段值

70
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档