按条件着色在contenteditable div textfield中的字母

时间:2016-05-20 21:08:02

标签: javascript html css meteor

我想为记忆游戏创建一个输入字段,其中每个正确的字母(以纯文本显示)显示为绿色,并且每个不正确的字母在输入字段内显示为红色。

必须输入的单词以字符串形式提供,因此我可以将输入与解决方案进行比较。

如何根据错误(红色)或右(绿色)使输入字段中的每个字母变成不同的颜色?

我发现this solution是随机颜色的,但我并没有真正转移到我的情况。

2 个答案:

答案 0 :(得分:4)

不幸的是,没有简单,优雅的方式来实现你想要的。而优雅我的意思是CSS。 (有::first-letter伪元素,但没有::n-th-letter :(这可能会打开相当多的可能性。)你最好的选择是用span包裹你的每个字母,然后根据一定的条件给它们涂上颜色。

<span>a</span><span>b</span><span>c</span><span>d</span>

var word = 'abcd';
var matches = [0, 1, 1, 0];

$(document).ready(function() {
  for(var i = 0; i <= word.length; i++){
    $("span").eq(i).css('color', matches[i] ? 'green':'red');
  };
});

Check it out on jsfiddle

答案 1 :(得分:3)

只需根据匹配决定使用哪种颜色(红色/绿色) - 这里是您所提到的jsfiddle的代码变体:

var correctString = "abcdefg"; // for example, this should come from your code
$("div").prop("contentEditable", true).blur(function(){

  $("#hidden").val($(this).text());
  this.innerHTML = "";

  var chars = $(this).text().split("");
  chars.forEach(function(c,i){
    // pick green if characters match, red otherwise
    // any "extra" characters are automatically red
    var color = ( i < correctString.length && c === correctString.charAt(i) )? "#0F0" : "#F00";
    $("<span>").text(this).css({ color: color }).appendTo("div");
  });
});