jquery对比两段文本文字的差异不同突出显示

所属分类: 网页特效-其它&杂项    2023-10-21 03:13:10

 81.3K  0  查看评论 (0)
jquery对比两段文本文字的差异不同突出显示 ie兼容6
 查看演示  登录后下载 温馨提示
登录会员即可享受免费下载
 我要建站

jquery对比两段文本文字的差异不同突出显示(共3个文件)

    • styles.css
    • index.html
    • app.js

使用方法

var refSentenceValue;
var mySentenceValue;
var output;
var algoReturn
$(document).ready(function () {
    main()
});

function main() {
    console.log("Initializtion")
}

function buttonClick() {

    // Get element values
    refSentenceElement = $("#refSentence").val()
    mySentenceValue = $("#mySentence").val()
    output = $("#output")

    // Get results from the algorithm
    algoReturn = sentenceChangeAlgo(refSentenceElement, mySentenceValue)

    // Split the string
    var mySentenceValueSplitted = mySentenceValue.split(" ")

    // Output HTML
    var myOutputHTML = "Empty";

    // Array of Words
    var myWords = []

    myOutputHTML = ""

    // Add HTML support for new, shifted and normal words
    for (let i = 0; i < mySentenceValueSplitted.length; i++) {
        // Init Word object with empty properties
        var myWord = new Object()
        myWord.value = ""
        myWord.html = ""
        myWord.newWord = false
        myWord.delWord = false
        myWord.shifted = false

        var currentWord = mySentenceValueSplitted[i]
        myWord.value = currentWord
        if (algoReturn.newWords.includes(currentWord)) {
            myWord.html = "<span class='new'>" + currentWord + "</span>"
            myWord.newWord = true
        }

        else if (algoReturn.shiftedWords.includes(currentWord)) {
            myWord.html = "<span class='shifted'>" + currentWord + "</span>"
            myWord.shifted = true
        }
        else {
            myWord.html = "<span class='normal'>" + currentWord + "</span>"
        }
        myWords.push(myWord)
    }

    // Add deleted words in the final string
    // Loop through the deleted words
    for (let i = 0; i < algoReturn.delWordsIndices.length; i++) {
        var myWord = new Object()
        myWord.value = algoReturn.delWords[i]
        myWord.html = "<span class='del'>" + algoReturn.delWords[i] + "</span>"
        myWord.delWord = true
        myWords.splice(algoReturn.delWordsIndices[i], 0, myWord)

    }

    myWords.map((item) => {
        myOutputHTML += item.html + " "
    })
    output.html(myOutputHTML)

}

function sentenceChangeAlgo(string1, string2) {
    // Tokenization based on space only
    var string1Splitted = string1.split(" ")
    var string2Splitted = string2.split(" ")

    // Variables to save settings
    var newWords = []
    var newWordsIndices = []

    var delWords = []
    var delWordsIndices = []

    var shiftedWords = []
    var shiftedWordsIndices = []

    // Check for new words
    // Loop through the first string
    for (let i = 0; i < string2Splitted.length; i++) {
        var currentWord = string2Splitted[i]
        var isFound = false
        // Loop through the second string
        for (let j = 0; j < string1Splitted.length; j++) {
            // Word found
            if (currentWord == string1Splitted[j]) {
                isFound = true
                break
            }
        }
        // Word not found
        if (isFound == false) newWords.push(currentWord)
    }

    // Check for deleted words 
    // Loop through the first string
    for (let i = 0; i < string1Splitted.length; i++) {
        var currentWord = string1Splitted[i]
        var isFound = false
        // Loop through the second string
        for (let j = 0; j < string2Splitted.length; j++) {
            // Word found
            if (currentWord == string2Splitted[j]) {
                isFound = true
                break
            }
        }
        // Word not found
        if (isFound == false) delWords.push(currentWord)
    }


    // Check for shifted words
    // Loop through the first string
    for (let i = 0; i < string1Splitted.length; i++) {
        var currentWord = string1Splitted[i]


        // Loop through the second string
        for (let j = 0; j < string2Splitted.length; j++) {
            // Word found
            if (currentWord == string2Splitted[j]) {
                if (i != j) {
                    shiftedWords.push(currentWord)
                    shiftedWordsIndices.push(j)
                }
                break
            }
        }

    }

    // Detect new words indices
    for (let i = 0; i < newWords.length; i++) {
        // Loop through the second string
        for (let j = 0; j < string2Splitted.length; j++) {
            // Word found
            if (newWords[i] == string2Splitted[j]) {
                newWordsIndices.push(j)
                break
            }
        }
    }

    // Detect deleted words indices 
    for (let i = 0; i < delWords.length; i++) {
        // Loop through the second string
        for (let j = 0; j < string1Splitted.length; j++) {
            // Word found
            if (delWords[i] == string1Splitted[j]) {
                delWordsIndices.push(j)
                break
            }
        }
    }

    // console.log("new words:", newWords)
    // console.log("new words indices:", newWordsIndices)
    // console.log("deleted words:", delWords)
    // console.log("deleted words indices:", delWordsIndices)
    // console.log("shifted words:", shiftedWords)
    // console.log("shifted words indices", shiftedWordsIndices)

    var algoReturn = new Object()
    algoReturn.newWords = newWords
    algoReturn.delWords = delWords
    algoReturn.shiftedWords = shiftedWords
    algoReturn.shiftedWordsIndices = shiftedWordsIndices
    algoReturn.newWordsIndices = newWordsIndices
    algoReturn.delWordsIndices = delWordsIndices
    return algoReturn
}

站长提示:
1. 苦力吧素材官方QQ群:950875342
2. 平台上所有素材资源,需注册登录会员方能正常下载。
3. 会员用户积极反馈网站、素材资源BUG或错误问题,每次奖励2K币
4. PHP源码类素材,如需协助安装调试,或你有二次开发需求,可联系苦力吧客服。
5. 付费素材资源,需充值后方能下载,如有任何疑问可直接联系苦力吧客服
相关资源 / 其它&杂项

jquery侧边栏滑出式在线客服特效

一款侧边栏在线客服代码,默认收缩在页面右侧,鼠标悬停触发滑出展开动画。
  其它&杂项
 1864  0

jquery鼠标连续点击一定次数后执行函数插件

一款鼠标连续点击次数触发函数插件,在某个元素上点击一定次数后执行函数。
  其它&杂项
 7833  0

jquery基于画布制作的字母数字验证码插件

一个简单的captcha验证码插件,它基于画布制作的字母数字混合captcha小部件,可以自定义验证码文本规则,自由设置:校验码长度、canvas宽度高度、是否点击刷新等。
  其它&杂项
 5883  0

jquery轻量级可自定义的嵌套树插件

一款支持自定义的嵌套树插件,将嵌套的HTML列表自动转换为select下拉列表元素,点选可显示对应的div内容。
  其它&杂项
 9631  0

评论数(0) 回复有机会获得K币 用户协议

^_^ 还没有人评论,快来抢个沙发!
😀
  • 😀
  • 😊
  • 😂
  • 😍
  • 😑
  • 😷
  • 😵
  • 😛
  • 😣
  • 😱
  • 😋
  • 😎
  • 😵
  • 😕
  • 😶
  • 😚
  • 😜
  • 😭
发表评论