div中的颜色字母

时间:2014-06-11 03:21:36

标签: javascript jquery html css

我创建了一个回文检查器。我想更进一步,并在检查时显示被比较的字母。

enter image description here

HTML:

<p id="typing"></p>
<input type="text" id="textBox" onkeyup="pal(this.value);"  value="" />
<div id="response"></div>   
<hr>
<div id="palindromeRun"></div>

JS:

要做到这一点,我会进行递归检查......然后,如果它是回文,我会运行colorLetters(),我正在尝试以绿色突出显示每个字母,因为它正在检查中。现在只需用第一个字母重写palindromeRun的HTML。我知道这是因为我重置HTML的方式。

我不知道如何抓住第一封和最后一封信,只更改那些字母&#39; css,然后在下一个setTimeout循环中递增i和j。

var timeout2 = null;

function pal (input) {
    var str = input.replace(/\s/g, '');
    var str2 = str.replace(/\W/, '');

    if (checkPal(str2, 0, str2.length-1)) {
        $("#textBox").css({"color" : "green"});
        $("#response").html(input + " is a palindrome");
        $("#palindromeRun").html(input);
        colorLetters(str2, 0, str2.length-1);
    }
    else {
        $("#textBox").css({"color" : "red"});
        $("#response").html(input + " is not a palindrome");
    }
    if (input.length <= 0) {
        $("#response").html("");
        $("#textBox").css({"color" : "black"});
    }

}

function checkPal (input, i, j) {
    if (input.length <= 1) {
        return false;
    }
    if (i === j || ((j-i) == 1 && input.charAt(i) === input.charAt(j))) {
        return true;
    }
    else {
        if (input.charAt(i).toLowerCase() === input.charAt(j).toLowerCase()) {
            return checkPal(input, ++i, --j);
        }
        else {
            return false;
        }
    }                             
}

function colorLetters(myinput, i, j) {
    if (timeout2 == null) {
        timeout2 = setTimeout(function () {
            console.log("called");
            var firstLetter = $("#palindromeRun").html(myinput.charAt(i))
            var secondLetter = $("#palindromeRun").html(myinput.charAt(j))

            $(firstLetter).css({"color" : "red"});
            $(secondLetter).css({"color" : "green"});

            i++;
            j++;
            timeout2=null;
        }, 1000);
    }
}

中学:如果可能的话,我只是想让用户输入的字母为这些字母着色......我意识到这需要每个setTimeout { {1}},但也不确定如何写这个。

enter image description here

1 个答案:

答案 0 :(得分:1)

要使字母与其周围的字符不同,您需要将其包装在自己的元素中,通常是span元素。参看Is it possible to apply different styles to different letters in word?

对于构成input元素值的字母,您不能这样做,因为浏览器会将该值视为纯文本。但是,如果使用用户可编辑的元素(具有contentEditable属性),则可以将每个字符放在内部元素中,但是您需要实现一个小编辑器或使用合适的库来执行此操作。 / p>