Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.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 如何禁用在div中选择某些文本?_Javascript_Html_Css_Selection - Fatal编程技术网

Javascript 如何禁用在div中选择某些文本?

Javascript 如何禁用在div中选择某些文本?,javascript,html,css,selection,Javascript,Html,Css,Selection,假设我有一个带有标记的文本,例如: 我想禁用选择,使选择的开始或结束不在标记中。因此,所有这些选择都应该是可能的: 另一方面,应禁用这些选择: 到目前为止,我只尝试使用一些简单的css, 标记{ -khtml用户选择:全部; -webkit用户选择:全部; -o-用户选择:全部; 用户选择:全部; } 这是标记的文本。我想禁用仅选择标记文本的一部分。用户选择CSS属性尚未正式发布,并且仅受最新浏览器支持 无论如何,您可以使用用户选择:无并将所有无法在span标记中选择的文本括起来

假设我有一个带有标记的文本,例如:


我想禁用选择,使选择的开始或结束不在标记中。因此,所有这些选择都应该是可能的:




另一方面,应禁用这些选择:



到目前为止,我只尝试使用一些简单的css,
标记{
-khtml用户选择:全部;
-webkit用户选择:全部;
-o-用户选择:全部;
用户选择:全部;
}

这是标记的文本。我想禁用仅选择标记文本的一部分。
用户选择CSS属性尚未正式发布,并且仅受最新浏览器支持

无论如何,您可以使用
用户选择:无并将所有无法在
span
标记中选择的文本括起来

但是你可以试试这样的

。不可选择{
-moz用户选择:无;
-webkit用户选择:无;
-ms用户选择:无;
用户选择:无;
}

可以选择此文本,但只能部分选择此文本

我认为仅使用CSS是不可能的,您很可能需要JavaScript来检测用户开始选择的元素


我所做的是使用了SelectionAPI中的方法(一个工作草案,可能还不能与所有浏览器一起使用,并且可能会被弃用)来检测所选范围是否包含整个标记元素。如果选择仅包含标记元素的一部分,它将使用
removeAllRanges
方法清除选择

功能检查选择(){
var sel=window.getSelection()
var marks=document.getElementsByTagName('mark')
对于(变量i=0;i
标记{
背景:黄色;
}

这是标记的文本。我想禁用只选择标记文本的一部分。
他不想不能选择,只是不能部分选择。我看不到任何简单的方法可以做到这一点。你将不得不解析文本,使用鼠标事件,添加类等。你可以提交一些错误报告,并希望浏览器供应商能够修复它。“如果选择将包含元素的一部分,那么选择必须包含整个元素,包括其所有子元素”-它没有说明选择必须以单击开始(MDN告诉我们),至于部分“是否有任何方法可以这样做”,请参见(是)请考虑将现有答案中的一个标记为接受或创建并接受自己的答案,这样这个问题就可以解决。+ 1提供一些有用的想法!但是,当选择开始或结束于标记的边界时,它将失败。@didgogns我在回答中确实提到过这种情况。我已经为您提供了完成您要求的任务的基本代码,并解释了其工作原理。要将其调整到特定的首选项,您必须对其进行编辑,以使其完全符合您的需要。