删除页面中所有文本的背景色,无论我们是否有选择
Removing background-color from all the text in the page, regardless whether we have a selection or not
我们有以下Javascript代码:
function makeEditableAndHighlight(colour) {
sel = window.getSelection();
if (sel.rangeCount && sel.getRangeAt) {
range = sel.getRangeAt(0);
document.designMode = "on";
sel.removeAllRanges();
sel.addRange(range);
}
if (!document.execCommand("HiliteColor", false, colour)) {
document.execCommand("BackColor", false, colour);
}
document.designMode = "off";
}
// This is the highlighting function. It takes a color as an argument.
function highlight(colour) {
var range, sel;
if (window.getSelection) {
try {
if (!document.execCommand("BackColor", false, colour)) {
makeEditableAndHighlight(colour);
window.getSelection().removeAllRanges();
}
} catch (ex) {
makeEditableAndHighlight(colour)
}
} else if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
range.execCommand("BackColor", false, colour);
}
}
// This returns the highlight to transparent (no highlighting) when the user clicks away in the document.
function body() {
document.getElementsByTagName("body")[0].addEventListener(
"click",
function(event){
highlight('transparent');
}
);
}
它是这样工作的:
当页面中有文本被选中时,如果你按下一个按钮(比如一个扩展弹出窗口),那么该文本就会变成黄色高亮显示,并被自动取消选中。
这就是问题的症结所在。
因为文本被自动取消选择,我无法将高亮显示恢复为相同的文本(因为不再有选择)
因此,这个问题的重点是最后一部分,即:
function body() {
document.getElementsByTagName("body")[0].addEventListener(
"click",
function(event){
highlight('transparent');
}
);
}
只有当我选择相同的文本并单击文档中的任何位置时,这才有效。
我希望它的工作方式是能够单击文档中的任何位置,并将任何突出显示的文本设置回原始文本(如果无法设置为原始文本,则设置为透明文本)。
我的目标是任何文本,因为我在这里没有选择。
所以基本上这个功能应该是这样工作的:
如果存在选择并按下按钮>高亮显示选择并自动删除所有选择。
当点击注册在页面中的任何位置时,无论是否有选择,都要删除任何文本上的突出显示。
同样,在最后一部分,即"删除任何突出显示"部分之前,这段代码似乎运行得很好。
您可以将对从body突出显示的调用替换为具有一个全局参数prevRange。然后在调用之后将prevRange重置为未定义。
高亮的签名可以是
功能突出显示(颜色,旧范围){
并像一样启动
function highlight(colour, oldRange) {
var range, sel, oldSelection;
if (typeof(oldRange) !== 'undefined') {
oldSelection = window.getSelection();
oldSelection.removeAllRanges();
oldSelection.addRange(oldRange);
}
sel = oldSelection || window.getSelection();
if (sel) {
该函数的其余部分可以使用sel
旧的范围需要在取消选择之前存储在prevRange中,makeEditableAndHighlight也可以获得可选参数oldRange(并进行类似于"function highlight(color,oldRange){"签名后的测试)
相关文章:
- 我们有一个好的javascript调试器吗
- Javascript:当元素中有<选择>时,可拖动元素搞砸了
- 有选择地使用 MathJax 渲染方程
- 一旦我们有值,我如何创建对象
- 有选择地激活按钮
- 在剑道网格中有选择地将编辑行中的单元格切换为编辑模式
- 是否可以有选择地限制 iframe 对其父文档的访问
- 如何告诉DDP有选择地观察更改某些字段,而不是所有定义的字段
- 有选择地使用 replace()
- 如何使用 geojson 有选择地启用 onEachFeature 函数
- XSS 如何工作 - 尤其是当我们有跨域安全性时
- Javascript/Node.js我可以使用hashmap有选择地执行函数吗?
- 为什么我们有sort(),reduce(),map(),filter()中的函数
- 删除页面中所有文本的背景色,无论我们是否有选择
- 我们有一个登录的基本登录功能,但随后它突然又回到登录屏幕
- 使用JQuery导航到下拉菜单上有选择的页面
- jQuery函数有选择地工作
- eval是邪恶的,但是我有选择吗?
- 根据以前的类名有选择地隐藏链接
- 使用Javascript或CSS,是否有选择CSS样式溢出:隐藏的元素