我创建了一个回文检查器。我想更进一步,并在检查时显示被比较的字母。
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}},但也不确定如何写这个。
答案 0 :(得分:1)
要使字母与其周围的字符不同,您需要将其包装在自己的元素中,通常是span
元素。参看Is it possible to apply different styles to different letters in word?
对于构成input
元素值的字母,您不能这样做,因为浏览器会将该值视为纯文本。但是,如果使用用户可编辑的元素(具有contentEditable
属性),则可以将每个字符放在内部元素中,但是您需要实现一个小编辑器或使用合适的库来执行此操作。 / p>