Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.09.2010, 12:06
Интересующийся
Отправить личное сообщение для belbek Посмотреть профиль Найти все сообщения от belbek
 
Регистрация: 18.04.2009
Сообщений: 29

выделение прямоугольной области
подскажите наиболее эффективное решение для реализации выделения прямоугольной области в веб-варианте excel(где ячейки spreadsheet - это ячейки таблицы), с возможностью последующего объединения ячеек(rowspan, colspan). Пробовал, с помощью 2 вложенных циклов, вроде выделяет, но как-то по разному всякий раз, тяну на весь лист а выделяется область 6 на 10 ячеек скажем, хотя mouseup не происходит, ресурсов процессора вроде хватает.
Ответить с цитированием
  #2 (permalink)  
Старый 22.09.2010, 15:03
Ламер
Отправить личное сообщение для DooMer Посмотреть профиль Найти все сообщения от DooMer
 
Регистрация: 19.02.2010
Сообщений: 295

посмотри Google Docs у них там Excel реализован
Ответить с цитированием
  #3 (permalink)  
Старый 22.09.2010, 16:21
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

belbek, а ты уверен, что потянешь такой проектище?
Мой вариантик (сделал just for fun, так что объединяет один раз из-за id-шников):
<table border="1" height="30" width="270">
  <tr>
    <td id="c1">abc</td><td id="c2">def</td><td id="c3">ghi</td>
    <td id="c4">jkl</td><td id="c5">mno</td><td id="c6">pqr</td>
    <td id="c7">stu</td><td id="c8">vwx</td><td id="c9">yz!</td>
  </tr>
</table>
<input type="button" onclick="unite()" value="Объединять" />
<script>
var table = document.getElementsByTagName('table')[0], 
allCells = document.getElementsByTagName('td'),
start, finish, clicked=false

table.onmousedown = function(){
  clicked=true
  for(var i=0,j=allCells.length;i<j;i++) allCells[i].style.background = 'white'
  var event = arguments[0] || window.event,
  cell = event.target||event.srcElement
  cell.style.background = 'blue'
  start = cell.id.match(/\d+/g)
  return false
}
table.onmouseout = function(event){
  if(!clicked) return
  var event = event || window.event,
  cell = event.relatedTarget || event.toElement
  if(cell.tagName != 'TD') return
  finish = cell.id.match(/\d+/g)
  for(var i=0,j=allCells.length;i<j;i++) allCells[i].style.background = 'white'
  var i,j
  if(start[0]<=finish[0]){ i=start[0]; j=finish[0] }
  else{ j=start[0]; i=finish[0] }
  for(;i<=j;i++) document.getElementById('c'+i).style.background = 'blue'
  return false
}
table.onmouseup = function(){
  clicked = false
}

function unite(){
  var i,j,inner='',cellsToDel=[]
  if(start[0]<=finish[0]){ i=start[0]; j=finish[0] }
  else{ j=start[0]; i=finish[0] }

  for(;i<=j;i++){
    var c = document.getElementById('c'+i)
    inner += c.innerHTML
    cellsToDel.push(c)
  }
  for(var a=1, b=cellsToDel.length;a<b;a++) cellsToDel[a].parentNode.removeChild(cellsToDel[a])
  cellsToDel[0].innerHTML = inner
}
</script>
Но это упрощенный пример. Если его расширять, то количество проблем будет множиться в геометрической прогрессии
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение текста в текстовом поле. Как снять выделение с пробела вконце? Roman Koff Events/DOM/Window 10 01.07.2010 16:48
Получение текстовой области на стороне клиента sukubba Общие вопросы Javascript 2 18.04.2010 19:10
выделение слова двойным щелчком Скриптор Общие вопросы Javascript 4 01.04.2010 00:47
Как убрать выделение в Опере у div, получившего фокус ? spa_2002 Opera, Safari и др. 5 03.09.2009 10:42
Выделение одиночных тэгов Pattern Events/DOM/Window 7 26.05.2009 23:29