"colspan"? не, не слышал.
Ребят, что то вообще бред какой-то творится. Динамическая созданная таблица, делаю им colspan, на последних строках, ломается к чертям почему-то. Гляньте, пожалуйста, а то уже глаза стёр.
for (i=0; i<4; i++){ var newRow1 = document.createElement("tr"); var newRow2 = document.createElement("tr"); var newRow3 = document.createElement("tr"); var newRow4 = document.createElement("tr"); var newCell1 = document.createElement("td"); newCell1.classList.add('td1'); var newCell2 = document.createElement("td"); var newCell3 = document.createElement("td"); var newCell4 = document.createElement("td"); var newCell5 = document.createElement("td"); newCell5.classList.add('td2'); var newCell6 = document.createElement("td"); newCell6.classList.add('td2'); var newCell7 = document.createElement("td"); var newCell8 = document.createElement("td"); var newCell9 = document.createElement("td"); var newCell10 = document.createElement("td"); var newCell11 = document.createElement("td"); var newCell12 = document.createElement("td"); newCell12.classList.add('td1'); var newCell13 = document.createElement("td"); var newCell14 = document.createElement("td"); var newCell15 = document.createElement("td"); var newCell16 = document.createElement("td"); newCell16.classList.add('td2'); var newCell17 = document.createElement("td"); newCell17.classList.add('td2'); var newCell18 = document.createElement("td"); var newCell19 = document.createElement("td"); var newCell20 = document.createElement("td"); var newCell21 = document.createElement("td"); var newCell22 = document.createElement("td"); var newCell23 = document.createElement("td"); newCell23.classList.add('td2'); var newCell24 = document.createElement("td"); newCell24.classList.add('td2'); var newCell25 = document.createElement("td"); var newCell26 = document.createElement("td"); var newCell27 = document.createElement("td"); var newCell28 = document.createElement("td"); var newCell29 = document.createElement("td"); var newCell30 = document.createElement("td"); newCell30.classList.add('td2'); var newCell31 = document.createElement("td"); var newCell32 = document.createElement("td"); var newCell33 = document.createElement("td"); var newCell34 = document.createElement("td"); newCell34.classList.add('td2'); var newCell35 = document.createElement("td"); newCell35.classList.add('td2'); var newCell36 = document.createElement("td"); var newCell37 = document.createElement("td"); var newCell38 = document.createElement("td"); var newCell39 = document.createElement("td"); var newCell40 = document.createElement("td"); var newCell41 = document.createElement("td"); newCell41.classList.add('td2'); var newCell42 = document.createElement("td"); var newCell43 = document.createElement("td"); var newCell44 = document.createElement("td"); newRow1.appendChild(newCell1); newRow1.appendChild(newCell2); newRow1.appendChild(newCell3); newRow1.appendChild(newCell4); newRow1.appendChild(newCell5); newRow1.appendChild(newCell6); newRow1.appendChild(newCell7); newRow1.appendChild(newCell8); newRow1.appendChild(newCell9); newRow1.appendChild(newCell10); newRow1.appendChild(newCell11); newRow2.appendChild(newCell12); newRow2.appendChild(newCell13); newRow2.appendChild(newCell14); newRow2.appendChild(newCell15); newRow2.appendChild(newCell16); newRow2.appendChild(newCell17); newRow2.appendChild(newCell18); newRow2.appendChild(newCell19); newRow2.appendChild(newCell20); newRow2.appendChild(newCell21); newRow2.appendChild(newCell22); newRow3.appendChild(newCell23); newRow3.appendChild(newCell24); newRow3.appendChild(newCell25); newRow3.appendChild(newCell26); newRow3.appendChild(newCell27); newRow3.appendChild(newCell28); newRow3.appendChild(newCell29); newRow3.appendChild(newCell30); newRow3.appendChild(newCell31); newRow3.appendChild(newCell32); newRow3.appendChild(newCell33); newRow4.appendChild(newCell34); newRow4.appendChild(newCell35); newRow4.appendChild(newCell36); newRow4.appendChild(newCell37); newRow4.appendChild(newCell38); newRow4.appendChild(newCell39); newRow4.appendChild(newCell40); newRow4.appendChild(newCell41); newRow4.appendChild(newCell42); newRow4.appendChild(newCell43); newRow4.appendChild(newCell44); tab[0].appendChild(newRow1); tab[0].appendChild(newRow2); tab[0].appendChild(newRow3); tab[0].appendChild(newRow4); } $('.td1').each(function(){ $(this).attr('colspan', '4'); }); $('.td2').each(function(){ $(this).attr('colspan', '2'); }); Захожу в файрбаг, с начала все хорошо, на последней строке ломается почему то. Если надо будет могу скирны выложить, как разъезжается. fireBug показывает, что colspan установился, но я то вижу же, что нетю |
А не удобнее ли описать создание ячеек циклом?
|
laimas,
Ну они как бы в цикле и создаются. Цитата:
|
Да нет, я имею ввиду методичное их перечисление, вставка...
|
laimas,
Да можно, но суть вопроса не в этом... |
AciDWarrioR,
сделай таблицу до и после |
Цитата:
|
Цитата:
|
|
laimas,
Друг, вот, честно, это проблемы не решит. Я переделаю это. Сейчас я просто делал заготовку и хотел посмотреть как это грамотно colspan разбить. Вот твой ответ, он знаешь как выглядит, я тебе кричу, что у меня дома пожар, а ты мне зачем я дом возле леса строил... |
обьединение ячеек таблицы
AciDWarrioR, запустить код, подождать 3 секунды, долго думать.
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> td{ width: 50px; border: 1px solid #000000; text-align: center; height: 50px; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> <script> $(function() { var mytable = $("<table/>"); $.each(Array(10), function(i, myData) { $(mytable).append($("<tr/>").append($.map(Array(10), function(a, num) { return $("<td/>", { text: num }) }))) }); $("body").append(mytable); function fn(data, table) { var del = []; Object.keys(data).forEach(function(key) { var tr = $("tr", table).eq(key); Object.keys(data[key]).forEach(function(i) { var td = $("td", tr).eq(i); var len = data[key][i]; td[0].colSpan = len; var temp = td.next(); for (var k = 1; k < len; k++) { temp.length && del.push(temp); temp = temp.next() } }) }); $.each(del, function(i, td) { td.remove() }) } var data = { 0: { 0: 2, 5: 2 }, 1: { 0: 2, 5: 2 } }; window.setTimeout(function() { fn(data, mytable) }, 3E3) }); </script> </head> <body> </body> </html> |
Цитата:
В данном же случае все "культурно идеально", что стоит прописать это в условиях? А добавлять строки и ячейки уж если JS, хватит методов insertRow() и insertCell(), и чтобы в одном цикле не писать портянки, а вставлять сразу ячейки, то число итераций должно быть Строк * Колонок. Что-то типа этого: <html> <head> <style> table { border-collapse: separate; } td { padding: 5px 10px; border: 1px solid #777; } </style> </head> <body> <script> var c = 11, r = 16, T = document.createElement("table"), C, R; document.body.appendChild(T); for(var i = 0, k = c * r, n; i<k; i++) { if(!(i % c)) { n = i / c; R = T.insertRow(-1); } C = R.insertCell(-1); if((!(n % 4) || (n & 3) == 1) && R.cells.length == c) { R.cells[0].colSpan = 2; R.cells[4].colSpan = 2; R.deleteCell(-1); R.deleteCell(-1); } } </script> </body> </html> |
рони,
:-? Реально долго думать!!! Я что то пока вообще не вдупляю, что там происходит. laimas, Воооо, это уже разговор))) Ну вот разбирая код: Цитата:
Всё догнал!) Сейчас разбирать буду) |
AciDWarrioR,
var data = { 0: { //индекс строки 0: 2, //индекс ячейки с которой начать обьединение и количество ячеек для обьединения 5: 2 //индекс ячейки с которой начать обьединение и количество ячеек для обьединения }, 1: { 0: 2, 5: 5 } }; window.setTimeout(function() { fn(data, mytable) //функция обьединения ячеек (обьект с данными для обьединения, таблица в которой необходимо это сделать) }, 3E3) |
AciDWarrioR,
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> td{ width: 50px; border: 1px solid #000000; text-align: center; height: 50px; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> <script> $(function(){ function fn(data, table) { var del = []; Object.keys(data).forEach(function(key) { var tr = $("tr", table).eq(key); Object.keys(data[key]).forEach(function(i) { var td = $("td", tr).eq(i); var len = data[key][i]; td[0].colSpan = len; var temp = td.next(); for (var k = 1; k < len; k++) { temp.length && del.push(temp); temp = temp.next() } }) }); $.each(del, function(i, td) { td.remove() }) } var data = { 1: { //индекс строки 0: 2 //индекс ячейки с которой начать обьединение и colSpan }, 2: { 0: 3 } }; window.setTimeout(function() { fn(data, $('table')) //функция обьединения ячеек (обьект с данными для обьединения, таблица в которой необходимо это сделать) }, 3E3) }) </script> </head> <body> <table> <thead> <tr> <th>Title 1</th> <th>Title 2</th> <th>Title 3</th> </tr> </thead> <tbody> <tr> <td>Cell 1.1</td> <td>Cell 1.2</td> <td>Cell 1.3</td> </tr> <tr> <td>Cell 2.1</td> <td>Cell 2.2</td> <td>Cell 2.3</td> </tr> </tbody> </table> </body> </html> |
рони,
Я вот пока пытаюсь laimas, пример сделать, мне с моим опытом он более понятен. Спасибо, что разъяснил, теперь понятно. А такой вопрос: почему мой изначальный вариант то разваливался? Есть идеи? |
Цитата:
|
Цитата:
|
|
Цитата:
Нужно построить таблицу с объединением ячеек в строке. Такое объединение легкое, в отличие от объединения ячеек в колонке, и изначально количество ячеек во всех строках равно. Можно построить так: а) обходом двумя циклами - по количеству строк и количеству ячеек в каждой строке б) обходом одним циклом с количеством итераций равных числу ячеек в таблице Касаемо строки, то нужно только знать когда создавать новую, что вполне не сложно узнать, а следовательно двух циклов не нужно. Долго строить таблицу в цикле, а затем ворошить ее опять чтобы объединить ячейки зачем? На этапе построения строки и ячейки уже под рукою, зачем же повторный обход. Я думаю, что это естественно, глядя на "портянки" обязательно возникнет вопрос "почему"? Цитата:
|
Цитата:
Я понял, что для строк, но почему именно три, это для меня загадка. Я для строк ввел переменную count = 0, в зависимости чему она равна (0, 1, 2, 3), Выполняется свои изменения для строки, если count = 4, обнулить. Так как одна запись из БД занимает 4 строки. Вот как то так. |
AciDWarrioR,
Цитата:
тоже самое без & if((!(n % 4) || !( (n-1) % 4)) && R.cells.length == c) { R.cells[0].colSpan = 2; R.cells[4].colSpan = 2; R.deleteCell(-1); R.deleteCell(-1); } |
!( (n-1) % 4)) - а какая хрен разница?
|
Цитата:
|
При условии, что строки не идентичны вот такой вариант:
if(R.cells.length == cell) { if (count == 4){ .... count = 0; } if(count == 0){ count++; .... } } else if(count == 1){ count++; .... } и т.д. |
Цитата:
|
Цитата:
Желательно наоборот как можно меньше всего этого и проверок тоже. Например, выражение: if((!(n % 4) || !( (n-1) % 4)) && R.cells.length == c) более разумнее, чем: if(R.cells.length == c && (!(n % 4) || !( (n-1) % 4))) хотя "от перемены мест слагаемых сумма их не изменяется". :) PS. Объединять ячейки (по условию) нужно в каждой пятой и следующей за ней строке. Каждую пятую определяет n % 4, а следующую за ней (n-1) % 4 или (n & 3) == 1. |
Цитата:
И, если таблицу строить на сервере, то это меньше крови будет. |
Цитата:
1) проверять количество писем только в понедельник и вторник? 2) проверять письма каждый день недели и только потом узнать какой день недели, чтобы принять решение нужно ли отвечать? А раз в случае ячеек таблицы иное условие? На фото объединение ячеек в колонке (первой), а это несколько иное нежели colspan. А ячейки по размерам файлов так вообще нечто непонятное. ) |
Цитата:
А про размер не говорите..стыдно:lol: Строго то не судите, веб разработкой никогда не занимался. На работу устроился, а тут сразу такое) Насчет алгоритма вы правы, но как задавать условие этим & не понимаю))) Как-нибудь почитаю) Но все же напоследок, огромное спасибо laimas и рони. Благодаря вам и ещё destus и delitant_pro полюбил этот форум и пытаюсь стать активном участником):) |
Часовой пояс GMT +3, время: 13:00. |