使用js或jquery单击工具栏按钮后换行html标记

时间:2016-08-03 07:51:28

标签: javascript jquery html css

我想做类似于本网站和wordpress所做的事情。当用户在屏幕上突出显示文本时,然后单击工具栏上的按钮,它将在文本周围包裹html标记。在jquery中,我可能会使用.wrap类,但是我如何检测用户是否突出显示了某些内容。

例如,当用户撰写Hello World然后点击粗体按钮时,它会显示<b>Hello World</b>

3 个答案:

答案 0 :(得分:0)

获取包装文本的html元素的文本,然后将<b>标记中嵌入的文本添加为​​html。

有关教程,请参阅jQuery DOM Manipulation

答案 1 :(得分:0)

这主要要求(1)访问input / textarea元素的selectionStartselectionEnd属性,以及(2)替换{{1}的子字符串该范围内的属性具有相同的文本,但包含在所需的开始和结束标记中。另外,我认为重新选择替换的文本是有意义的,这需要对valueselect()进行几次调用。此外,如果没有选择(意味着开始等于结束),那么根本不做任何事情可能是个好主意。

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
}