javascript 如何更改字符串中多个特定单词的颜色?

yshpjwxd  于 2023-11-15  发布在  Java
关注(0)|答案(3)|浏览(456)

我试图创建一个函数,它可以读取一个大的文本字符串,自动检测关键字,然后更改这些单个单词的颜色。例如,在句子中,“他走到商店,然后他走到他的房子,”我希望函数单独检测单词“他”,并将文本颜色更改为绿色,同时也检测到单词“walked”,将文本颜色更改为红色,而不更改句子的其余部分。这将是一个更大的规模与更多的关键字和颜色。
我已经达到了这样的程度,我可以让我的程序检测到一个用or写的文本字符串中的某些单词,但是当我试图通过那里改变单词的颜色时,它改变了字符串中所有单词的颜色(通过改变CSS),这不是我想要的。我还让它改变了a中的单个单词,但是它也改变了其他部分中的单词。
我也很难让它改变不同的关键字,例如,当它使用的颜色绿色为“走过”时,它实际上应该是红色的。我不想手动使用周围的每一个字,所以我想找到一种方法来自动做到这一点。

sgtfey8w

sgtfey8w1#

试试这个例子。
该功能用于单独检测单词“he”并将文本颜色改变为绿色,同时还检测单词“walked”以将文本颜色改变为红色而不改变句子的其余部分。

  1. <html lang="en">
  2. <head>
  3. <title>Coloring Words</title>
  4. <!-- Include jQuery from a CDN (Content Delivery Network) -->
  5. <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
  6. </head>
  7. <body>
  8. <div id="coloredText">he walked to the store and then he walked to his house</div>
  9. </body>
  10. </html>
  1. .green {
  2. color: green;
  3. }
  4. .red {
  5. color: red;
  6. }
  1. $(document).ready(function() {
  2. var coloredText = $("#coloredText").text();
  3. var keywordClasses = {
  4. "he": "green",
  5. "walked": "red",
  6. };
  7. var words = coloredText.split(/\s+/);
  8. for (var i = 0; i < words.length; i++) {
  9. var word = words[i].toLowerCase(); // Convert to lowercase for case-insensitivity
  10. var cssClass = keywordClasses[word];
  11. if (cssClass) {
  12. words[i] = "<span class='" + cssClass + "'>" + words[i] + "</span>";
  13. }
  14. }
  15. $("#coloredText").html(words.join(' '));
  16. });
展开查看全部
cig3rfwq

cig3rfwq2#

对于纯JavaScript,您可以这样做

  1. // Original string
  2. const original = 'he walked to the store and then he walked to his house,'
  3. // Set original string
  4. document.querySelector("#original").innerText = original
  5. // On form submit
  6. document.querySelector("form").addEventListener("submit", onSubmit)
  7. // On form submit handler
  8. function onSubmit(event) {
  9. event.preventDefault()
  10. // Styled output
  11. let output = original
  12. // Get text to be converted to green
  13. const greenText = document.querySelector("#toGreen").value
  14. // Get text to be converted to yellow
  15. const yellowText = document.querySelector("#toYellow").value
  16. // Change all `greenText` to green and return
  17. output = changeColor(output, greenText, 'green')
  18. // Change all `yellowText` to yellow and return
  19. output = changeColor(output, yellowText, 'yellow')
  20. // Print styled string to screen
  21. document.querySelector("#styled").innerHTML = output
  22. }
  23. function changeColor(string, text, color) {
  24. return string.replace(text, `<span style="color: ${color}">${text}</span>`)
  25. }

个字符
在片段中,输入需要更改为“绿色”和“黄色”的单词。然后按Submit x
要实际更改字符串中的单词颜色,您需要将其 Package 在<span/>中。
changeColor方法将在<span/> and change it color, then return the styled string. Then you can put this styled string in元素中 Package 特定的单词。innerHTML`

展开查看全部
enyaitl3

enyaitl33#

让我们看看为什么你的方法可能有问题:

  • 你的模式可能不匹配整个单词,这就是为什么它改变了其他部分的单词。
  • 你没有颜色分配方法
    我们如何修复它:
  • 我们可以有一个方法getWordAndColor来将颜色设置为单词
  • 我们可以有另一种方法来改变句子的词指定的颜色
  1. const getWordAndColor = () => {
  2. let wordAndColor = {};
  3. wordAndColor['he'] = 'green';
  4. wordAndColor['walked'] = 'red';
  5. wordAndColor['store'] = '#4682B4';
  6. return wordAndColor;
  7. }
  8. const setColorToWord = (wordAndColor, sentence) => {
  9. for (let key in wordAndColor) {
  10. if (wordAndColor.hasOwnProperty(key)) {
  11. let value = wordAndColor[key];
  12. let dynamicPattern = key;
  13. let pattern = new RegExp("\\b" + dynamicPattern + "\\b", 'gi');
  14. let replacement = '<span style="color: '+value+';">'+key+'</span>';
  15. sentence = sentence.replace(pattern, replacement);
  16. }
  17. }
  18. return sentence;
  19. }
  20. let sentence = "he walked to the store and then he walked to his house,";
  21. let wordAndColor = getWordAndColor();
  22. document.getElementById('wordAndColorText').innerHTML = setColorToWord(wordAndColor, sentence);

个字符

展开查看全部

相关问题