javascript - 使用 html 标签更改数组中的元素,然后显示该数组

标签 javascript html reactjs

我正在开发一个词频应用程序,用户可以在其中找到文本中最常用的单词并更改该单词,并在 HTML 中显示整个文本的更改版本。

我创建了一个函数,您可以在更改后的单词周围创建一个 span 标记,这样我就可以给一个类添加一些 CSS 来突出显示它。

    const updatedTextArr = text.map(word => {
        const isSameWord = word === mostUsedWord
        if (isSameWord) {
            const spanNode = document.createElement("span")
            const alteredWord = `foo${mostUsedWord}bar`
            spanNode.append(alteredWord)
            word = spanNode
            return word
        } else {
            return word
        }
        const createString = updatedTextArr.join(" ").toString()
        setTextData(createString)
    })

但是这样,当我console.log它时,文本数组中返回的更改后的单词显示为“HTML元素”

当我显示“createString”时,它会显示与 View 中的“HTML 元素”相同的更改后的单词。

我想知道向找到的最常用单词添加跨度标签的更好方法是什么?

最佳答案

使用Maparray.reduce你可以解决这个问题。

const highlight = (text = "") => {
  const words = text.split(/\W/g);
  const wordMap = words.reduce((m, word) => {
    if (!m[word]) m[word] = 0;
    m[word] = (m[word] || 0) + 1;
    return m;
  }, {});
  let mostUsedWord = { count: 0, word: "" };
  for (let word in wordMap) {
    if (mostUsedWord.count < wordMap[word]) {
      mostUsedWord = { count: wordMap[word], word };
    }
  }
  return words.map(word => {
    if (word === mostUsedWord.word) {
      word = `<span class="highlighted">${word}</span>`;
    }
    return word;
  });
};

const createString = highlight(
  "This is a book of life. Which is never found in the jungle."
).join(" ");
console.log(createString);
document.getElementById("app").innerHTML = createString
.as-console-row {color: red!important}

.highlighted {color: red!important}
<div id="app"></div>

关于javascript - 使用 html 标签更改数组中的元素,然后显示该数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60856039/

相关文章:

javascript - 读取包含整个 html 代码的 jquery 变量中标签的属性时出现问题

javascript - 使用 react-router 遇到 TS 错误 "Property ' 确切'不存在类型'

javascript - 如何在循环中设置状态?

javascript - 用于静态网页的 AngularJS SEO(S3 CDN)

javascript - Ember 的 'observes' 抛出断言错误,而计算属性则不会?

javascript - 如何在 ajax 查询更改大小值时使输入宽度大小设置动画

javascript - 如何在不显式传递要更新的字段名称的情况下使用 this.setState 在 React 组件中设置状态?

javascript - ASP.NET MVC 与 React - 如何组合使用它们

javascript - 使用 ngFor 索引增加 [ngStyle] attr?

javascript - 无法在 angularjs Controller 中分配下拉选择值。