铬的非连续选择?

Nik*_*las 12 javascript google-chrome selection

更新

我最近发现,您可以通过在要取消选择或隐藏的部分之间替换元素/文本节点然后显示它们,以编程方式创建不连续的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);
Run Code Online (Sandbox Code Playgroud)

然而,当执行复制事件时,整个选择确实被选中(即使它们之间存在间隙),但是当然可以使用相同的方法以编程方式在执行复制事件之前改变选择.

现在棘手的部分是,你可以通过按住Ctrl键来实际使用这个功能,就像你在Firefox中创建非连续选择一样.我在示例中使用的当前方法将TextNodes分成许多部分,出于视觉目的没有区别.然而,它也使用额外的标签来打破选择,据我发现,无法删除.但是,可以通过删除TextNodes并为其添加新的TextNodes来实现相同的功能.问题是它只会考虑添加的最后一个节点,因此如果您的选择中有多个空格,它将只考虑您应用的最后一个DOM更改.

任何人都可以想到任何非文档破解方法来应用这种非连续选择,这些选择不会对选择及其元素进行任何永久性更改吗?

原来的问题

是否可以在Google Chrome中进行不连续的选择?例如,如果您的元素包含如下文本:

<div>this is some random text</div>

是否有可能作出的选择包含例如this istext使文字在两者之间未选择?

这似乎在FF中工作正常,你可以其中添加彼此不相邻的范围,并相应地进行选择.

对于IE,似乎没有任何东西允许你有多个范围,但IE的选择对象有很多其他方法来补偿它.

对于非连续选择,您可以始终在网站上附加或预先选择某个部分,例如在执行复制操作时,或强制用户取消选择您不希望他们复制的选择的某些部分.

非连续选择的例子:

在此输入图像描述

工作示例(至少在FF4中工作).

编辑 要手动执行相同类型的选择,您可以使用firefox按住ctrl并开始在不同位置拖动文本,但在chrome上执行它不起作用.

编辑2 我猜这个,总结得很好.就webkit浏览器而言,似乎没有任何预期.

Tim*_*own 5

不会。Firefox 是唯一支持多个选定范围的主流浏览器。我认为它的主要用例是允许选择表中的各个列,否则这是不可能的。

据我所知,WebKit 不打算很快支持多个选定的范围。IE 彻底修改了 IE 9 的 Range 和 Selection API,但没有实现它。不知道 Opera 是否有计划支持它。请参阅WHATWG 邮件列表中的此线程以获取一些信息: