- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
如果我有以下 HTML:
<div class="content">
Vivamus <span>luctus</span> urna sed urna ultricies ac tempor dui sagittis.
</div>
我在 mouseup
上举办了一场事件查看所选文本的范围:
$(".content").on("mouseup", function () {
var start = window.getSelection().baseOffset;
var end = window.getSelection().focusOffset;
if (start < end) {
var start = window.getSelection().baseOffset;
var end = window.getSelection().focusOffset;
} else {
var start = window.getSelection().focusOffset;
var end = window.getSelection().baseOffset;
}
console.log(window.getSelection());
console.log(start + ", " + end);
});
然后我选择单词 Vivamus
从内容中,它将记录 1, 8
,因为这是选择的范围。
如果,但是,我选择了单词 urna
,它会记录 15, 20
, 但不会考虑 <span>
HTML 的元素。
有没有 focusOffset
和 baseOffset
也算作 HTML 标记,而不仅仅是文本?
最佳答案
更新
实例:http://jsfiddle.net/FLwxj/61/
Using a clearSelection()
function和 a replace approach , 我能够达到预期的结果。
var txt = $('#Text').html();
$('#Text').html(
txt.replace(/<\/span>(?:\s)*<span class="highlight">/g, '')
);
clearSelection();
来源:
clearSelection()
:https://stackoverflow.com/a/6562764/1085891 您将在下面找到一些针对您的问题的有效解决方案。我按照代码效率的顺序排列它们。
可行的解决方案
https://stackoverflow.com/a/8697302/1085891 ( live example )
window.highlight = function() {
var selection = window.getSelection().getRangeAt(0);
var selectedText = selection.extractContents();
var span = document.createElement("span");
span.style.backgroundColor = "yellow";
span.appendChild(selectedText);
span.onclick = function (ev) {
this.parentNode.insertBefore(
document.createTextNode(this.innerHTML),
this
);
this.parentNode.removeChild(this);
}
selection.insertNode(span);
}
https://stackoverflow.com/a/1623974/1085891 ( live example )
$(".content").on("mouseup", function () {
makeEditableAndHighlight('yellow');
});
function makeEditableAndHighlight(colour) {
sel = window.getSelection();
if (sel.rangeCount && sel.getRangeAt) {
range = sel.getRangeAt(0);
}
document.designMode = "on";
if (range) {
sel.removeAllRanges();
sel.addRange(range);
}
// Use HiliteColor since some browsers apply BackColor to the whole block
if (!document.execCommand("HiliteColor", false, colour)) {
document.execCommand("BackColor", false, colour);
}
document.designMode = "off";
}
function highlight(colour) {
var range, sel;
if (window.getSelection) {
// IE9 and non-IE
try {
if (!document.execCommand("BackColor", false, colour)) {
makeEditableAndHighlight(colour);
}
} catch (ex) {
makeEditableAndHighlight(colour)
}
} else if (document.selection && document.selection.createRange) {
// IE <= 8 case
range = document.selection.createRange();
range.execCommand("BackColor", false, colour);
}
}
https://stackoverflow.com/a/12823606/1085891 ( live example )
其他有用的解决方案:
关于javascript - window.getSelection() 用 HTML 标签偏移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15181471/
您能回答一下这个问题吗? how do I get co-ordinates of selected text in an html using javascript document.getSele
var F1 = document.getElementById('samuText').value; function insertAtCursor() { if (window.getSelec
我尝试复制window.getSelection()至someObject将其存储为对象属性以供将来重用。 我有这个代码: var selection = window.getSelection();
这是我的代码: var sb = new qx.ui.form.SelectBox(); sb.add( new qx.ui.form.ListItem("English") ); sb.add( n
我正在使用新的 Firepad realtime text collaboration service . 我想对用户选择的框中的文本使用 JavaScript getSelection 方法。 但是
我正在尝试使用 document.getSelection 来选择我在所见即所得编辑器的文本区域中输入的文本。不过,它仅在您选择文本区域外的文本时才有效。不知道有没有办法让它在文本区域内选择文本? 下
我想在 iframe 设计模式中获取选定的内容。我正在使用以下代码。 function getIframeSelectionText(iframe) { var win = iframe.co
我需要建立一个评论机制,用户可以在其中突出显示一段文本,单击“对此发表评论”,然后执行某些操作。 Javascript 代码必须不仅要知道所选文本(这很简单),还要知道 anchorOffset,才能
我试图存储 window.getSelection() 的值,但如果用户选择另一个选择,这个值似乎会改变。 在我下面的代码中,我存储了初始用户的选择。然后我创建我的表单(这需要一些时间),当表单创建完
在firefox和chrome中window.getSelection用于获取document中的当前选择,但是如果当前选择在textarea中,window.getSelection返回的不是选择,
我有一个丰富的编辑器,我正在将其重写为 lit-element 自定义元素。我正在使用 Firefox(最新)进行测试。我正在尝试在自定义元素的 shadowDom 中选择内容可编辑元素(在方法中)。
在 Java 项目中,我使用 swt 小部件按钮作为复选框。 I have read the java docs我需要检查该框是否被选中的函数似乎是 Button.getSelection()。在我的
我正在尝试手动选择文本。 window.getSelection().getRangeAt(0); 行用于窗口选择的文本。但我希望这个由我预先选择。 foo=function() {
我正在使用带有 contenteditable 的 div 来制作文本编辑器。我觉得我在第一个障碍中失败了。 var bold = document.getElementById("bol
我一整天都在搜索 SO 和各种网站,发现了很多可能正好适合我的问题的答案,但我在实现解决方案时遇到了麻烦。快速概述我要实现的目标: 我构建了一个富文本编辑器。 我需要正确处理附加了格式的“粘贴”数据。
drawBarChart = function (data) { //few statements goes here which sets options which are being passe
我一直对为什么这种行为发生在 safari 上感到困惑。当我输入一些文本时,我试图获得选择,为此我使用了 window.getSelection() 并且它在 Firefox、Chrome、Opera
我在现有表格的mootools 1.3中制作了一个HtmlTable.Select,尝试了“selectable: true”和“enableSelect”,没有任何效果,如果我尝试访问表格的“get
下面是我的html代码: This is some short text. 当我使用鼠标并从“is”到“short”进行选择时,使用下面在网上找到的函数, function getSelectionC
在 JavaScript 中,我不知道如何通过单击使用 window.getSelection()? var s = window.getSelection(); s = s.toString().t
我是一名优秀的程序员,十分优秀!