当前位置: 首页 > 知识库问答 >
问题:

使用JavaScript更改选定文本的字体

司空叶五
2023-03-14

当我突出显示div中的特定文本时,如何更改字体。当我从下拉框中选择字体时,下面的代码将更改整个文本的字体。

function changeFont(font) {
  document.getElementById("note_header").style.fontFamily = font.value;
}
Highlight text and change font <br>
<select id="select_font" onchange="changeFont(this);">
            <option value="Arial">Arial</option>
            <option value="Sans Serif" selected>Sans Serif</option>
            <option value="Comic Sans MS">Comic Sans MS</option>
            <option value="Times New Roman">Times New Roman</option>
            <option value="Courier New">Courier New</option>
            <option value="Verdana">Verdana</option>
            <option value="Trebuchet MS">Trebuchet MS</option>
            <option value="Arial Black">Arial Black</option>
            <option value="Impact">Impact</option>
            <option value="Bookman">Bookman</option>
            <option value="Garamond">Garamond</option>
            <option value="Palatino">Palatino</option>
            <option value="Georgia">Georgia</option>
        </select>
<div contenteditable="true" id="note_header" style="width:200px; height:200px; border: 1px solid #ccc">
  Some Content
</div>

共有3个答案

吴浩博
2023-03-14

你可以试试这个:

function changeFont(font) {
  document.getElementById("note_header").style.fontFamily= font.value;
  document.getElementById("select_font").setAttribute(
   "style", "border: 1px solid red; outline: none");
   }
<select id="select_font" onchange="changeFont(this);">
            <option value="Arial">Arial</option>
            <option value="Sans Serif" selected>Sans Serif</option>
            <option value="Comic Sans MS">Comic Sans MS</option>
            <option value="Times New Roman">Times New Roman</option>
            <option value="Courier New">Courier New</option>
            <option value="Verdana">Verdana</option>
            <option value="Trebuchet MS">Trebuchet MS</option>
            <option value="Arial Black">Arial Black</option>
            <option value="Impact">Impact</option>
            <option value="Bookman">Bookman</option>
            <option value="Garamond">Garamond</option>
            <option value="Palatino">Palatino</option>
            <option value="Georgia">Georgia</option>
        </select>
<div contenteditable="true" id="note_header" style="width:200px; height:200px; border: 1px solid #ccc">
  Some Content
</div>
柳涵映
2023-03-14

您需要使用窗口。getSelection()div中获取所选文本,由于您只想更改突出显示的文本,因此可以使用

function changeFont(font) {
    var selectedText = "";
    if (window.getSelection) {
      selectedText = window.getSelection().toString();
      var newContent = $('#note_header').html().replace(selectedText, '<span style="font-family:'+font.value+';">'+selectedText+'</span>');
      $('#note_header').html(newContent);
    }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Highlight text and change font <br>
<select id="select_font" onchange="changeFont(this);">
            <option value="Arial">Arial</option>
            <option value="Sans Serif" selected>Sans Serif</option>
            <option value="Comic Sans MS">Comic Sans MS</option>
            <option value="Times New Roman">Times New Roman</option>
            <option value="Courier New">Courier New</option>
            <option value="Verdana">Verdana</option>
            <option value="Trebuchet MS">Trebuchet MS</option>
            <option value="Arial Black">Arial Black</option>
            <option value="Impact">Impact</option>
            <option value="Bookman">Bookman</option>
            <option value="Garamond">Garamond</option>
            <option value="Palatino">Palatino</option>
            <option value="Georgia">Georgia</option>
        </select>
<div contenteditable="true" id="note_header" style="width:200px; height:200px; border: 1px solid #ccc">
  Some Content
</div>

李飞翼
2023-03-14

为了增强Ankit的回答,
这里有一个不使用replace()函数的解决方案。

Ankit解决方案的问题是,如果文本重复出现,则所选文本的第一次出现被替换
例如,当文本为“abc”时,我们选择了第二个文本,这是第一个更改字体的文本。

⋅ ⋅ ⋅

下面的代码段使用所选文本和字体创建一个新的html元素,然后删除所选内容并在其位置插入新元素:
(请参见代码中的注释)

function changeFont(font) {
  var sel = window.getSelection(); // Gets selection
  if (sel.rangeCount) {
    // Creates a new element, and insert the selected text with the chosen font inside
    var e = document.createElement('span');
    e.style = 'font-family:' + font.value + ';'; 
    e.innerHTML = sel.toString();

    // https://developer.mozilla.org/en-US/docs/Web/API/Selection/getRangeAt
    var range = sel.getRangeAt(0);
    range.deleteContents(); // Deletes selected text…
    range.insertNode(e); // … and inserts the new element at its place
  }
}
.editable {
  width: 360px;
  height: 120px;
  border: 1px solid #ccc
}
Highlight text and change font <br>
<select id="select_font" onchange="changeFont(this);">
  <option value="Arial">Arial</option>
  <option value="Sans Serif" selected>Sans Serif</option>
  <option value="Comic Sans MS">Comic Sans MS</option>
  <option value="Times New Roman">Times New Roman</option>
  <option value="Courier New">Courier New</option>
  <option value="Verdana">Verdana</option>
  <option value="Trebuchet MS">Trebuchet MS</option>
  <option value="Arial Black">Arial Black</option>
  <option value="Impact">Impact</option>
  <option value="Bookman">Bookman</option>
  <option value="Garamond">Garamond</option>
  <option value="Palatino">Palatino</option>
  <option value="Georgia">Georgia</option>
</select>
<div contenteditable="true" class="editable">
  Some Content
</div>
 类似资料:
  • 问题内容: 我有这样的选项菜单: 现在,我想使用href更改选定的选项。例如: 但是我想用而不是选择选项。 如何更改此代码? 问题答案: 更改 至

  • 问题内容: 为什么以下内容对我不起作用? 问题答案: 因为您的脚本在运行之前运行,所以标签存在于页面中(在DOM中)。可以将脚本放在标签后,或者等待文档完全加载(使用OnLoad函数) 这行不通: 这将起作用: 此示例(jsfiddle链接)维护顺序(首先是脚本,然后是标签),并使用onLoad:

  • 问题内容: 我有一个JTextPane(或JEditorPane,我可以使用两个都没问题)。如何将选定区域的字体更改为特定字体? 将无法正常工作。(即使是字体家族) 问题答案: 您只能整体更改JTextPane的字体,而不能更改RTF文本。 有一个下面的JEdi​​torPane(显然的JTextPane太),你得到的与保持。您希望将其转换为a ,然后可以对给定的字符序列进行操作。 Java教程h

  • 问题内容: 我有一个这样的下拉列表: 如何使用JavaScript获取实际的选项文本而不是值?我可以通过以下方式获得价值: 但不是我想要的。 问题答案: 尝试选项

  • 问题内容: 我正在尝试制作一个将用作荧光笔的javascript小书签,当按小书签时,将网页上所选文本的背景更改为黄色。 我正在使用以下代码来获取选定的文本,并且工作正常,返回正确的字符串 } 但是,当我创建了一个类似的函数来使用jQuery更改所选文本的CSS时,它不起作用: } 有任何想法吗? 问题答案: 最简单的方法是使用,该命令具有在所有现代浏览器中更改背景颜色的命令。 以下应该在任何选择

  • 我正在使用JTextPane创建一个文本编辑器,它允许用户更改所选文本的颜色。但是当用户选择文本时,然后选择更改颜色的选项(比如,改为红色),直到取消选择文本时,文本才会显示为红色。我尝试使用setSelectedTextColor来更改所选文本的颜色,但这不起作用,因为当之后选择文本时,它会将文本更改为红色。有没有一种方法可以使选定的文本显示为它的实际颜色?或者像它在Word中的工作方式那样,它