铬中的非连续选择?
|
更新资料
我最近发现,您可以使用Chrome以编程方式创建不连续的选择,方法是在要取消选择的部分之间替换元素/文本节点,也可以隐藏它们然后显示它们。
Chrome的非连续选择示例:http://jsfiddle.net/niklasvh/YKJBW/
var t = $(\'div\').contents().get(0);
$.each(t.nodeValue.split(\" \"),function(i,e){
t = t.splitText(e.length);
if (t.length>0){
t = t.splitText(1);
}
});
var c = $(\'div\').contents();
$.each(c,function(i,e){
if (i>0){
if (i%3) { }else{
e.parentNode.replaceChild($(\'<unselect />\').text(e.nodeValue).get(0),e);
}
}
});
$(\'unselect\').hide();
window.setTimeout(function(){
$(\'unselect\').show();
},0);
但是,在执行复制事件时,确实会选中整个选择(即使它们之间有间隙),但是当然可以使用相同的方法在执行复制事件之前以编程方式更改选择。
现在最棘手的部分是,您可以像在Firefox中一样通过按住Ctrl键来创建非连续选择,从而使该功能真正可用吗?我在示例中使用的当前方法将TextNode分为许多部分,出于视觉目的,这没有区别。但是,它也使用其他标签来中断选择,据我所知,该选择无法删除。但是,可以通过删除TextNode并为其添加新的位置来实现相同的功能。问题在于,它将仅考虑添加的最后一个节点,因此,如果您在选择中有多个空格,则将仅考虑您应用的最后一个DOM更改。
谁能想到应用此非连续选择的任何非文档破坏方法,这些方法不会对该选择及其元素进行任何永久性更改?
原始问题
是否可以在Google Chrome浏览器中进行不连续的选择?例如,如果您有一个带有如下文本的元素:
<div>this is some random text</div>
是否可以进行包含this is
和text
的选择,使中间的文本未被选择?
在FF中,这似乎工作正常,您可以在其中添加彼此不相邻的范围,并进行相应的选择。
对于IE,似乎没有任何东西可以让您拥有多个范围,但是IE \的选择对象还有很多其他方法可以弥补这一点。
使用非连续选择,您可以始终在网站的某个部分中添加或添加选择,例如在执行复制操作时,或者强制用户取消选择的某些部分,而您不希望它们被复制。
非连续选择的示例:
工作示例(至少在FF4中工作)。
编辑
要手动执行相同类型的选择,您可以使用Firefox按住ctrl并开始将文本拖到不同的位置,但是在chrome上执行则无效。
编辑2
我想这和它总结得很好。就Webkit浏览器而言,似乎没有什么可期待的。
没有找到相关结果
已邀请:
2 个回复
物崎巩
讹巳漓把备