[英]How to change color of text in a textarea
我有一个textarea
,当我输入一些东西时,对于某些单词,颜色应该改变。
例如,如果键入的文本是下一个: He went to the market to buy an apple
这是我目前的代码:
var str = 'market'; var value = str.includes('market'); if (value == str) { document.getElementById("text").style.color = "green"; } else { document.getElementById("text").style.color = "red"; }
<textarea rows="9" cols="100" id="text" onClick="changeText();"></textarea>
不幸的是,你不能在textarea
添加标记,但是这里有一个你可以作为开始方法的想法,它来自这个链接 。 该方法将基于此:
基本的想法是小心地在
<textarea>
后面<textarea>
一个<div>
<textarea>
。 然后,JavaScript
将用于将输入<textarea>
任何文本复制到<div>
。 多一点JavaScript
会使两个元素都滚动为一个。 在所有内容完美对齐的情况下,我们可以在<div>
添加标记以为某些特定单词提供颜色,并且我们将在<textarea>
上将文本颜色设置为透明,从而完成幻觉。
// Initialization. const colorMap = {"apple": "red", "market": "green", "banana": "orange"}; let textArea = document.getElementById("myTextArea"); let customArea = document.querySelector(".custom-area"); let backdrop = document.querySelector(".backdrop"); // Event listeners. textArea.addEventListener("input", function() { customArea.innerHTML = applyColors(textArea.value); }); textArea.addEventListener("scroll", function() { backdrop.scrollTop = textArea.scrollTop; }); function applyColors(text) { let re = new RegExp(Object.keys(colorMap).join("|"), "gi"); return text.replace(re, function(m) { let c = colorMap[m.toLowerCase()]; return `<spam style="color:${c}">${m}</spam>`; }); }
.backdrop, #myTextArea { font: 12px 'Open Sans', sans-serif; letter-spacing: 1px; width: 300px; height: 100px; } #myTextArea { margin: 0; position: absolute; border-radius: 0; background-color: transparent; color: transparent; caret-color: #555555; z-index: 2; resize: none; } .backdrop { position: absolute; z-index: 1; border: 2px solid transparent; overflow: auto; pointer-events: none; } .custom-area { white-space: pre-wrap; word-wrap: break-word; }
<div class="container"> <div class="backdrop"> <div class="custom-area"> <!-- Cloned text with colors will go here --> </div> </div> <textarea id="myTextArea"></textarea> </div>
请注意,这只是理解基本思想的基本方法。 但是通过一些工作,也许你可以得到一个通用版本。 例如,到目前为止, textarea
无法调整大小。 但也许你可以检测到那个事件,并在backdrop
重新调整backdrop
。
您可以将textarea中的文本设置为整体样式,但由于textarea没有子元素,或者您无法在该textarea单独样式中提供单独的文本。 另一方面,如果你有一个单独的div显示文本的副本,你可以在div的innerHTML中分配苹果替换苹果中的单词..但textarea中的文本将保持不变..可能叠加div textarea的顶部,但隐藏,直到在textarea中输入文本。 不确定要做这件事的准确代码,还是它可行。 但至少它是一个可行的逻辑链,我希望可以帮助你找到解决方案。
要从该文本中为特定单词着色,您必须使用html标记包装该单词。 但textarea不支持html标签。
您可以在textarea字段之外执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.