我想做类似于本网站和wordpress所做的事情。当用户在屏幕上突出显示文本时,然后单击工具栏上的按钮,它将在文本周围包裹html标记。在jquery中,我可能会使用.wrap类,但是我如何检测用户是否突出显示了某些内容。
例如,当用户撰写Hello World
然后点击粗体按钮时,它会显示<b>Hello World</b>
答案 0 :(得分:0)
获取包装文本的html元素的文本,然后将<b>
标记中嵌入的文本添加为html。
有关教程,请参阅jQuery DOM Manipulation。
答案 1 :(得分:0)
这主要要求(1)访问input / textarea元素的selectionStart
和selectionEnd
属性,以及(2)替换{{1}的子字符串该范围内的属性具有相同的文本,但包含在所需的开始和结束标记中。另外,我认为重新选择替换的文本是有意义的,这需要对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()
答案 2 :(得分:0)
我使用this问题来获取所选文字。并且this向我提问 获取包含所选文本的元素。我将它们组合在一个函数中。
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
}