Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-如何为所选文本设置标记?_Javascript - Fatal编程技术网

JavaScript-如何为所选文本设置标记?

JavaScript-如何为所选文本设置标记?,javascript,Javascript,我需要用JavaScript突出显示所选文本,没有jQuery,左右都有控制点或标记,我真的不知道如何调用它们,就像在手机上一样,所以我可以通过拖动任何控制点随时扩展选择 例如: 我抓取了选定的文本,演示: 现在我有了这个工作代码来获取文本,但我希望在其周围有标记,如上所述: 2013年10月28日更新: 在Dementic给出以下答案后,我想出了下一个工作代码: 当我选择多行时,唯一的问题仍然存在。在这种情况下,标记显示错误。在这里找到了解决方案: 它只使用了一点Jquery,对其进行了修改,

我需要用JavaScript突出显示所选文本,没有jQuery,左右都有控制点或标记,我真的不知道如何调用它们,就像在手机上一样,所以我可以通过拖动任何控制点随时扩展选择

例如:

我抓取了选定的文本,演示:

现在我有了这个工作代码来获取文本,但我希望在其周围有标记,如上所述:

2013年10月28日更新:

在Dementic给出以下答案后,我想出了下一个工作代码:

当我选择多行时,唯一的问题仍然存在。在这种情况下,标记显示错误。

在这里找到了解决方案:

它只使用了一点Jquery,对其进行了修改,使其纯js只删除了选择器和onclick,您可以在这里找到一个工作示例:

这将用黄色背景标记选定的文本,并且需要更多的工作才能在两侧有标记

对于一个想法,你可以使用一个绝对定位的div作为标记, 当它被拖动时,您可以使用以下内容:

function expand(range) {
    if (range.collapsed) {
        return;
    }

    while (range.toString()[0].match(/\w/)) {
        range.setStart(range.startContainer, range.startOffset - 1);   
    }

    while (range.toString()[range.toString().length - 1].match(/\w/)) {
        range.setEnd(range.endContainer, range.endOffset + 1);
    }
}
摘自:

还有一件事, 我已经找到了一个可以正常工作的js库来做你想做的事情。。。
看看:

您没有得到任何答复,因为您的请求浪费时间。实际上,您希望人们为您编写整个代码,这可能需要相当长的时间,现在只需将其作为100分的答案发回即可。。。你应该做的是:将问题分解成更小的部分,例如:如何使用javascript获取所选文本。然后是另一个问题:我如何为所选文本设置标记?顺便说一句,我不确定这是否可行,等等。如果他们看到你想做什么并请求帮助,那么SO上的人会非常乐意提供帮助。谢谢。你认为将我的问题编辑成:如何为所选文本设置标记更有意义吗?我认为你应该从如何抓取所选文本开始。然后,你可以问另一个问题:我有这个工作代码来获取文本,但我希望在它周围有标记,一步一步地进行,在这个过程中,你将了解它是如何工作的,人们将能够提供一些代码和建议。完成,非常感谢,非常感谢你给我一个方向来澄清我的问题:这些标记应该像在手机上一样工作吗?也就是说,它们应该是可扩展的吗?谢谢。我试图在选择的开头放置一个绝对HTML元素,但它表示TypeError:range.startContainer不是一个函数。奇怪的是,非常接近。唯一的问题是选择了多条线。在这种情况下,标记会发疯。你看了我最后给出的链接了吗?好的,我想你已经准备好了。2个问题:我有这个代码,但标记会发疯:或类似的问题。问题2应该是:有了标记,现在我需要拖动它们并扩展或缩小选择:。但我还没有这些记号笔,至少是间接的,所以我还在努力。
function expand(range) {
    if (range.collapsed) {
        return;
    }

    while (range.toString()[0].match(/\w/)) {
        range.setStart(range.startContainer, range.startOffset - 1);   
    }

    while (range.toString()[range.toString().length - 1].match(/\w/)) {
        range.setEnd(range.endContainer, range.endOffset + 1);
    }
}