Я создал тест для решения этой проблемы с помощью jQuery, потому что, честно говоря, это просто делает это проще. Метод, который я использовал, состоял в том, чтобы перебрать возможные элементы и проверить, находятся ли они внутри диапазона.
function display() {
if (document.getSelection) {
var str = document.getSelection();
} else if (document.selection && document.selection.createRange) {
var range = document.selection.createRange();
var str = range;
} else {
var str = 0;
}
if(str != 0){
$("td").each(function() {
var range, sourceRange, compare;
range = str.getRangeAt(0);
sourceRange = document.createRange();
sourceRange.selectNode(this);
compare = range.compareBoundaryPoints(Range.START_TO_END, sourceRange) * range.compareBoundaryPoints(Range.END_TO_START, sourceRange);
if (compare == -1){
alert(this.id);
}
/*
if you really just want to change the background color, uncomment this code:
*/
/*
if (compare == -1){
$(this).css("background", "#f00");// or any other color here.
}
*/
});
);
}
if (window.Event)
document.captureEvents(Event.MOUSEUP);
document.onmouseup = display;
это, вероятно, не лучшее решение, но оно может заставить нас двигаться в правильном направлении.