首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将句子拆分成字母,并在其中添加动态类(该字母的位置)

将句子拆分成字母,并在其中添加动态类(该字母的位置)
EN

Stack Overflow用户
提问于 2021-11-27 10:37:26
回答 4查看 59关注 0票数 0

我试图将一个句子/单词分割成不同的字母,并能够使用下面的代码。

代码语言:javascript
复制
var textWrapper = document.getElementById("heading");
    textWrapper.innerHTML = textWrapper.textContent.replace(/\S/g, "<span class='letter'>$&</span>");
代码语言:javascript
复制
<h1 class="heading" id="heading">
 Hello!
</h1>

输入

代码语言:javascript
复制
<h1> Hello! </h1>

我从这个得到了什么

代码语言:javascript
复制
<h1>
 <span class="letter">H</span>
 <span class="letter">e</span>
 <span class="letter">l</span>
 <span class="letter">l</span>
 <span class="letter">o</span>
 <span class="letter">!</span>
</h1>

我想要什么

代码语言:javascript
复制
<h1>
  <span class="letter-1">H</span>
  <span class="letter-2">e</span>
  <span class="letter-3">l</span>
  <span class="letter-4">l</span>
  <span class="letter-5">o</span>
  <span class="letter-6">!</span>
</h1>

我怎样才能做到这一点呢?

代码语言:javascript
复制
textWrapper.innerHTML = textWrapper.textContent.replace(/\S/g, "<span class='letter-{what should I do here?}'>$&</span>");

如果这是不可能的,我可以用其他的方法来实现这一点。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-11-27 10:48:55

如果您真的想为此使用regex,您可以传回replace(),并在整个字符串中访问匹配的matchoffset

代码语言:javascript
复制
var textWrapper = document.getElementById('heading');
textWrapper.innerHTML = textWrapper.textContent.replace(
  /\S/g,
  (match, offset) => `<span class='letter_${offset}'>${match}</span>`
);

console.log(textWrapper.outerHTML);
代码语言:javascript
复制
<h1 class="heading" id="heading">
 Hello!
</h1>

如果您不想依赖于offset,而是想要一个受控计数器,您可以在这里使用闭包增加自己的计数器

代码语言:javascript
复制
((c)=>(match) => `<span class='letter_${c++}'>${match}</span>`)(1)

代码语言:javascript
复制
var textWrapper = document.getElementById('heading');
textWrapper.innerHTML = textWrapper.textContent.replace(
  /\S/g,
  ((c) => (match) => `<span class='letter_${c++}'>${match}</span>`)(1)
);

console.log(textWrapper.outerHTML);
代码语言:javascript
复制
<h1 class="heading" id="heading">
 Hello!
</h1>

票数 1
EN

Stack Overflow用户

发布于 2021-11-27 10:49:44

我在regex方面没有任何知识,所以我会这样做

代码语言:javascript
复制
    const heading = document.getElementById("heading");
    const letters = heading.innerText.split("").map((letter, index) => {
      const span = document.createElement("span");
      span.innerText = letter;
      span.classList.add("letter-" + (index + 1));
      return span;
    });
    heading.innerHTML = "";
    letters.forEach((span) => heading.appendChild(span));
票数 2
EN

Stack Overflow用户

发布于 2021-11-27 10:48:04

您还必须使用某种循环来添加字符索引。

代码语言:javascript
复制
var textWrapper = document.getElementById( "heading" );
// `<span class='letter-${++index}'>$&</span>`
const text = textWrapper.textContent.trim();
textWrapper.innerHTML = "";

text.split("").forEach((char, i) => {
  const span = document.createElement("span");
  span.classList.add(`letter-${i + 1}`);
  span.textContent = char;
  textWrapper.appendChild(span);
})
代码语言:javascript
复制
  <h1 class="heading" id="heading">
    Hello!
  </h1>

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

https://stackoverflow.com/questions/70134009

复制
相关文章

相似问题

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