[英]Wrap an html tag after clicking a toolbar button using js or jquery
我想做類似於這個網站和wordpress的做法。 當用戶在屏幕上突出顯示文本時,然后單擊工具欄上的按鈕,它將在文本周圍包裹html標記。 在jquery中我可能會使用.wrap類,但是我如何檢測用戶是否突出顯示了某些內容。
例如,當用戶編寫Hello World
時,單擊粗體按鈕,它將顯示<b>Hello World</b>
獲取包裝文本的html元素的文本,然后將嵌入在<b>
標記中的文本添加為html。
有關教程,請參閱jQuery DOM Manipulation 。
這主要要求(1)訪問input / textarea元素的selectionStart
和selectionEnd
屬性,以及(2)用相同的文本替換該范圍內的value
屬性的子字符串,但包含在所需的開始和結束標記中。 另外,我認為重新選擇被替換的文本是有意義的,這需要對select()
和setSelectionRange()
進行幾次調用。 此外,如果沒有選擇(意味着開始等於結束),那么根本不做任何事情可能是個好主意。
window.selWrapBold = function(id) { selWrap(id,'<b>','</b>'); }; window.selWrapItalic = function(id) { selWrap(id,'<i>','</i>'); }; window.selWrap = function(id,startTag,endTag) { let elem = document.getElementById(id); let start = elem.selectionStart; let end = elem.selectionEnd; let sel = elem.value.substring(start,end); if (sel==='') return; let replace = startTag+sel+endTag; elem.value = elem.value.substring(0,start)+replace+elem.value.substring(end); elem.select(); elem.setSelectionRange(start,start+replace.length); } // end selWrap()
<input type="button" value="bold" onclick="selWrapBold('ta1');"/> <input type="button" value="italic" onclick="selWrapItalic('ta1');"/> <br/> <textarea id="ta1"></textarea>
我用這個問題來獲取所選文本。 這個問題是為了獲得帶有選定文本的元素。 我將它們組合在一個功能中。
function updateHighlightedText() {
var text = "";
if (window.getSelection) {
text = window.getSelection().toString();
} else if (document.selection && document.selection.type != "Control") {
text = document.selection.createRange().text;
}
var node = $(window.getSelection().anchorNode.parentNode); //Get the selected node
node.html(node.text().replace(text, "<b>"+text+"</b>")); //Update the node
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.