删除所选文本粗体和前景?没有execCommand

时间:2015-10-21 23:50:44

标签: javascript html css

我正在使用javascript来突出显示OR bolden一个选定的文本范围,它运作良好,但是如果再次单击该按钮并且所选范围是粗体或高亮显示,如何使其变为UNBOLD和UNHIGHLIGHTED

我无法使用doc.execcommand或jquery,因为我在android webview中使用它,如果我使用doc.execcommand命令需要1秒钟或更长时间才能工作(大文本)并使用javascript即时,如果我使用Jquery( zepto或其他),文本采用AGES在webview中打开,没有它,最多需要1或2秒。

=(

我用什么来制作选定的文字BOLD:

function bold() {
    var range               = window.getSelection().getRangeAt(0);
    var selectionContents   = range.extractContents();
    var span                = document.createElement("span");
    span.appendChild(selectionContents);
    span.setAttribute("class","bold");
    span.style.fontWeight  = "bold";

    range.insertNode(span);
  }

并突出显示(PS:突出显示不是特定颜色,用户将通过颜色选择器选择将返回#xxxxxx

function foreground() {

var range               = window.getSelection().getRangeAt(0);
var selectionContents   = range.extractContents();
var span                = document.createElement("span");

span.appendChild(selectionContents);

span.setAttribute("class","foreground");
span.style.color            = "#" + colorbyUser;

range.insertNode(span);}

我认为粗体/斜体/ strike / strikeThrough /下划线只能是css中的特定类,我只需添加它并删除(如果已经为所选范围设置了,就不知道如何删除它)

但背景和前景颜色不可能,因为每个选择(字母/单词或更多)可能会有所不同

抱歉,糟糕的英语= x

编辑C-smile

我知道了,但我不知道如何在这种情况下获得元素:

<span class="bold">Hello   <span class="underline">C</span>-<span class="italic">Smile</span></span>

如何删除HELLO的BOLD用户SELECT只是HELLo,但是不要删除C-Smile的粗体?

可能吗?没有jquery(在一个大文档中加载年限)或doc.execcomand(需要很长时间才能在一个大文档中工作)

1 个答案:

答案 0 :(得分:0)

如果你将范围包装成<span class="highlight">之类的东西 然后删除你需要解开它 - 获取跨度的内容节点并用其内容节点替换该跨度。

这正是$.unwrap()在jQuery中所做的。