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