简体   繁体   English

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

[英]Change font for selected text using JavaScript

How can I change the font when I highlight a specific text from the div. 当突出显示div中的特定文本时,如何更改字体。 The code below changes the font of the whole text when I select a font from my dropbox. 当我从保管箱中选择一种字体时,下面的代码将更改整个文本的字体。

 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> 

Trying to enhance Ankit's answer, 试图增强Ankit的答案,
Here is a solution that doesn't use the replace() function. 这是一种不使用replace()函数的解决方案。

The issue with Ankit's solution is that the first occurence of a selected text was replaced in case of a text being repeated. Ankit解决方案的问题在于,如果重复出现某个文本,则替换该文本的首次出现。
For example, when the text is "abc abc" and we selected the second one, that was the first one that got its font changed. 例如,当文本为“ abc abc”时,我们选择了第二个,即第一个更改了其字体的文本。

⋅ ⋅ ⋅ ⋅⋅⋅

The snippet below creates a new html element with the selected text and the chosen font, then deletes the selection and inserts the new element at its place: 下面的代码段使用所选的文本和所选的字体创建一个新的html元素,然后删除所选内容并将新元素插入其位置:
(See comments in the code) (请参见代码中的注释)

 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> 

Note that jQuery isn't unnecessarily added. 请注意,不需要添加jQuery。
(OP didn't used it in their question) (OP在他们的问题中没有使用它)

I hope it helps. 希望对您有所帮助。

You need to use window.getSelection() to get the selected text from the div and since you are just willing to change the highlighted text so you can surround the highlighted text with <span> element and then apply the font-family css to that <span> . 您需要使用window.getSelection()div获取选定的文本,并且由于您只愿意更改突出显示的文本,因此可以用<span>元素包围突出显示的文本,然后将font-family css应用于该文本。 <span> This <span> element will hold the highlighted text so the font-family will be changed to this highlighted text only. <span>元素将保留突出显示的文本,因此font-family将仅更改为该突出显示的文本。

 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> 

You can try this: 您可以尝试以下方法:

 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> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM