Обновление
Я недавно обнаружил, что вы можете программно создавать выборки в 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);
Однако при выполнении события копирования, весь выбор будет выбран (даже если онимеет промежутки между ними), но, конечно, тот же метод можно использовать для программного изменения выбора перед выполнением события копирования.
Сложность в том, что теперь вы можете сделать эту функциональность полезной, удерживая Ctrlвниз, как вы можете в Firefox, чтобы создать не непрерывный выбор.Текущий метод, который я использую в этом примере, разбивает TextNodes на множество частей, что для визуальных целей не имеет значения.Тем не менее, он также использует дополнительные теги, чтобы сломать выделение, которое, насколько я обнаружил, не может быть удалено.Однако ту же функциональность можно получить, удалив TextNodes и добавив для них новые.Проблема в том, что он будет учитывать только последний добавленный узел, поэтому, если у вас есть несколько пробелов в вашем выборе, он будет учитывать только последнее изменение DOM, которое вы применили.
Может кто-нибудь придумать любой другой-документ, ломающий способы применения этого непрерывного выбора , который не вносит постоянных изменений в выборку и ее элементы?
Исходный вопрос
Можно ли делать выборки, которые не являются непрерывными в Google Chrome?Например, если у вас есть элемент с текстом, подобным этому:
<div>this is some random text</div>
Можно ли сделать выделение, которое содержит, например, this is
и text
, сделав текстмежду невыбранными?
Кажется, что это нормально работает в FF, где вы можете addRanges , которые не находятся рядом друг с другом, и выбор сделан соответственно.
ДляIE, кажется, не существует ничего, что позволило бы вам иметь несколько диапазонов, но у объекта выбора IE есть много других методов, которые его компенсируют.
При неконтинентальном выборе вы всегда можете добавитьили перед выделением определенного раздела на веб-сайте, например, при выполнении действий копирования, или заставьте пользователя отменить выбор определенных частей своих выборов, которые вы не хотите, чтобы они копировали.
Пример непрерывноговыбор:
рабочий пример (работа по крайней мере в FF4).
правка Чтобы выполнить то же самоетип выборавключив вручную, вы можете с помощью Firefox удерживать Ctrl и начать перетаскивать текст в разные позиции, но выполнить его на Chrome не получится.
edit 2 Полагаю this и это достаточно хорошо суммирует.Похоже, в отношении браузеров WebKit ожидать нечего.