Непрерывный выбор в хроме?

Обновление

Недавно я обнаружил, что вы можете программно создавать варианты с 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 есть много других методов, которые его компенсируют.

С неконкурентными выборами вы всегда можете добавлять или добавлять выделение определенного раздела с веб-сайта, например, при выполнении действий копирования, или заставлять пользователя отбирать определенные части своих выборов, которые вы не хотите, чтобы они копия.

Пример неконкурентного выбора:

enter image description here

рабочий пример (работает, по крайней мере, в FF4).

изменить Чтобы выполнить тот же тип выбора вручную, вы можете с помощью firefox удержать ctrl вниз и начать перетаскивать текст в разных положениях, но выполнение его на хроме не работает.

изменить 2 Я думаю, this и это подвести итог достаточно хорошо, Похоже, нет ничего, что можно было бы ожидать в отношении браузеров webkit.

Ответ 1

Нет. Firefox - единственный основной браузер, поддерживающий несколько выбранных диапазонов. Я думаю, что основным прецедентом для него было разрешение выбора отдельных столбцов в таблицах, что невозможно в противном случае.

WebKit не планирует поддерживать несколько выбранных диапазонов в ближайшее время, из того, что я могу собрать. IE переработал свои API-интерфейсы Range и Selection для IE 9 и не реализовал его. Не знаю, планирует ли Opera поддерживать его. Для получения дополнительной информации см. этот поток из списка рассылки WHATWG:

Ответ 2

Нет, нет концепции множественного выбора диапазона текста. Выбор связан с кареткой. Один карет - один выбор.