我正在使用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(需要很长时间才能在一个大文档中工作)
答案 0 :(得分:0)
如果你将范围包装成<span class="highlight">
之类的东西
然后删除你需要解开它 - 获取跨度的内容节点并用其内容节点替换该跨度。
这正是$.unwrap()在jQuery中所做的。