首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在不影响document.execCommand(" italic ")的情况下从<i>标签中移除斜体样式?

有没有办法在不影响document.execCommand(" italic ")的情况下从<i>标签中移除斜体样式?
EN

Stack Overflow用户
提问于 2020-02-14 21:30:18
回答 3查看 344关注 0票数 0

我想让<i>标签中的文本在可内容编辑的div中不显示为斜体。

但是,正如您在下面的代码片段中看到的那样,如果我将font-style:normal添加到斜体样式,则unitalicize的document.execCommand('italic')将不再起作用,因为浏览器会正确地检测到文本不是斜体。

有没有办法同时拥有统一外观的<i>和使用unitalicize的方法?

代码语言:javascript
复制
function italicize(){
  document.execCommand("italic");
}
代码语言:javascript
复制
i{
  font-style:normal;
  color:red;
}
代码语言:javascript
复制
<div contenteditable=true>a<i>b</i>c</div>

<button onclick=italicize()>italic</button>

EN

回答 3

Stack Overflow用户

发布于 2020-02-14 23:06:49

代码语言:javascript
复制
function italicize() {
  let myDiv = document.querySelector("#myDiv");
  myDiv.style.fontStyle.localeCompare("italic") ? myDiv.style.fontStyle = "italic" : myDiv.style.fontStyle = "normal";
}
代码语言:javascript
复制
i {
  font-style: normal;
  color: red;
}
代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>

<body>
  <div id="myDiv" contenteditable=true>a<i>b</i>c</div>
  <button onclick="italicize()">italic</button>
</body>

</html>

这就是你要找的吗?#newToStackOverflow

票数 0
EN

Stack Overflow用户

发布于 2020-02-14 23:07:13

一种方法是创建一个特定的样式规则,该规则从<div>中的所有<i>元素中删除默认的斜体样式。

然后,使用querySelectorAll,您可以将位于<div contenteditable="true">属性中的所有<i>作为目标,并通过切换一个类将文本设置为斜体:

代码语言:javascript
复制
function italicize() {
  let contentDivs = document.querySelectorAll('[contenteditable="true"] > i')
  for (let div of contentDivs) {
    div.classList.toggle('add-italic');
  }
}
代码语言:javascript
复制
div > i {
  font-style: normal;
  color: red;
}

.add-italic {
  font-style: italic;
}
代码语言:javascript
复制
<div contenteditable="true">a<i>b</i>c</div>

<button onclick="italicize()">italic</button>

票数 0
EN

Stack Overflow用户

发布于 2020-02-14 23:15:31

此问题的更多解决方案。

使用innerText更改节点

代码语言:javascript
复制
function unitalicize(){
   var element = document.getElementsByTagName("i")[0];
   var span = document.createElement("span");
   while(element.firstChild){
           span.appendChild(element.firstChild);
   }
   element.parentElement.replaceChild(span,element)
}
function italicize(){
  var element = document.getElementsByTagName("span")[0];
  var i = document.createElement("i");
  while(element.firstChild){
     i.appendChild(element.firstChild);
  }
  element.parentElement.replaceChild(i,element)
}
代码语言:javascript
复制
i{
  color:red;
}
代码语言:javascript
复制
<div contenteditable=true>a<i>b</i>c</div>

<button onclick=unitalicize()>unitalicize()</button>
<button onclick=italicize()>italicize()</button>

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

https://stackoverflow.com/questions/60227321

复制
相关文章

相似问题

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