首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用html标记更改数组中元素,然后显示该数组

问使用html标记更改数组中元素,然后显示该数组
EN

Stack Overflow用户
提问于 2020-03-26 03:27:57
回答 2查看 39关注 0票数 0

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

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

代码语言:javascript
复制
    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 element“。

当我显示"createString“时,它在视图中显示与"HTML element”相同的更改过的单词。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-26 04:07:35

使用Map和array.reduce可以解决这个问题。

​

代码语言:javascript
复制
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
代码语言:javascript
复制
.as-console-row {color: red!important}

.highlighted {color: red!important}
代码语言:javascript
复制
<div id="app"></div>

​

票数 1
EN

Stack Overflow用户

发布于 2020-03-26 03:45:33

你的最后两行在函数内部,它们应该在外部。如果希望整个元素都是文本,可以使用outerHTML。此外,不需要else语句,因为您在任何情况下都会返回单词。

代码语言:javascript
复制
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.outerHTML
    }  
    return word
} )

const createString = updatedTextArr.join( " " ).toString()
setTextData( createString )

这将返回类似"one <span>footwobar</span> three"的内容(如果使用最多的单词是两个)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60856039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档