gpt4 book ai didi

javascript - chrome 中的非连续选择?

转载 作者:可可西里 更新时间:2023-11-01 02:11:19 26 4
gpt4 key购买 nike

更新

我最近发现您可以使用 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 并为其添加新的 TextNode 来实现相同的功能。问题是它只会考虑最后添加的节点,所以如果您的选择中有多个空格,它只会考虑您应用的最后一个 DOM 更改。

谁能想出任何非文档中断方式来应用这种非连续选择不会对选择及其元素进行任何永久更改?

原始问题

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

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

是否可以进行选择,例如包含 this istext使中间的文本处于未选中状态?

这在 FF 中似乎工作正常,您可以在其中 addRanges它们彼此不相邻,并相应地进行选择。

对于 IE,似乎没有任何东西可以让你有多个范围,但 IE 的选择对象有很多其他方法可以弥补它。

对于非连续选择,您总是可以在网站的某个部分附加或预先添加一个选择,例如在执行复制操作时,或者强制用户取消选择他们选择的某些部分,而您不希望他们这样做复制。

非连续选择的例子:

enter image description here

working example (至少在 FF4 中工作)。

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

编辑2我猜 thisthis总结的很好。就 webkit 浏览器而言,似乎没有什么值得期待的。

最佳答案

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

据我所知,WebKit 不打算很快支持多个选定范围。 IE 对 IE 9 的 Range 和 Selection API 进行了大修,但没有实现它。不知道 Opera 是否有支持它的计划。参见 this thread from the WHATWG mailing list一些信息:

关于javascript - chrome 中的非连续选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6349451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com