javascript - 使用 JavaScript 更改所选文本的字体

标签 javascript html contenteditable

当我突出显示 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>

最佳答案

尝试增强 Ankit 的答案,
这是一个不使用 replace() 函数的解决方案。

Ankit 解决方案的问题是,如果文本重复,则所选文本的第一次出现会被替换。
例如,当文本是“abc 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>

请注意,并非不必要地添加 jQuery。
(OP在他们的问题中没有使用它)

希望对您有所帮助。

关于javascript - 使用 JavaScript 更改所选文本的字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49851451/

相关文章:

html - 调整大小时按钮无法排成 1 行

html - 通过 HTML 对齐文本框

javascript - 创建简单的 Rich-Text WYSIWYG 编辑器的最佳方法是什么?

javascript - 获取div内文本的实际高度

javascript - $http.delete 返回没有信息的错误

javascript - 没有类型或值时按类名对 jQuery 数据表进行排序

html - 位置 : absolute displays cover each other

javascript - contentEditable - Firefox <br/> 标签

javascript - 原始 javascript 而不是 jquery(示例如下)

javascript - 排序和处理推文的最佳方式 - Twitter API