table.cells select(from,to)
Всё просто: Необходимо выделить в таблице ячейки, будто их выделил пользователь.
А так же и обратно: Узнать, какие ячейки выделял пользователь. Есть вариант с onmousedown/onmouseup и window.event.srcElement.cellIndex и т.п. Но это, сами понимаете, очень криво... А вот как выделить скриптом группу ячеек - вопрос сложнее. Подсветка не годится: Нужно, чтобы пользователь мог реально перетащить выделение куда-нибудь... P.S.: Пишу редактор Dump'а со встроенным Disassembler. Функционирует нормально, проблемы остались в интерфейсе: Не знаю, как узнать какую часть кода в Dump'е выделили и куда перетащили... На данный момент нашлась:
function SelectTarget(target, from,to) {
var rng, sel;
if ( document.createRange ) {
rng = document.createRange();
rng.selectNode( target )
sel = window.getSelection();
sel.removeAllRanges();
sel.addRange( rng );
} else {
var rng = document.body.createTextRange();
rng.moveToElementText( target );
rng.moveStart("word", from);
rng.moveEnd("word", to );
rng.select();
}
}
Похоже, осталось лишь разобраться с определением выделенных ячеек.:)Спасибо! |
Для DOM можно почитать тут. Для ИЕ надо гуглить :)
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript">
window.onload = function() {
var table = document.getElementById("table");
var selStart = table.tBodies[0].rows[0].cells[4];
var selEnd = table.tBodies[0].rows[3].cells[0];
var range;
var ie /*@cc_on = true @*/;
if(ie) {
range = document.selection.createRange();
var range2 = range.duplicate();
range.moveToElementText(selStart);
range2.moveToElementText(selEnd);
range.setEndPoint("EndToEnd", range2);
range.select();
} else {
range = document.createRange();
range.selectNodeContents(selEnd);
range.setStart(selStart, 0);
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
}
};
</script>
</head>
<body>
<table id="table" summary="">
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr>
<tr>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
<td>10</td>
</tr>
<tr>
<td>11</td>
<td>12</td>
<td>13</td>
<td>14</td>
<td>15</td>
</tr>
<tr>
<td>16</td>
<td>17</td>
<td>18</td>
<td>19</td>
<td>20</td>
</tr>
</tbody>
</table>
</body>
</html>
Range, TextRange и Selection |
Цитата:
Цитата:
Какрас-таки там я и нашёл приведённый мною способ... А вот <tbody>...</tbody> я никогда на страницах не использовал. Он так обязателен? По стандартам W3C? |
Цитата:
|
А наоборот, как узнать какие ячейки таблицы выделил пользователь?
UPD.: вопрос снимаю, свою (чуть более узкую) задачу решил. |
| Часовой пояс GMT +3, время: 16:38. |