Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение ширины таблицы джаваскриптом 
:(
    Опции темы
Vidocq
Дата 3.2.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



Sardar
Уменьшение ширины работает. Но после того, как я восстановляю ширину - пропадает (обрезается) текст внутри ячейки...
Как сделать, чтоб он там оставался после восстановления ширины?


--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
Sardar
Дата 3.2.2005, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Тогда перепишем пример:
Код

function resizeColumn(id, index, width) {
var tb=document.getElementById(id), dv;
if(tb.rows[0].cells.length<=index) return;
for(var i=0; i<tb.rows.length; i++) {
  dv=tb.rows[i].cells[index].firstChild; //первый элемент в ячейке
  dv.style.position="relative";
  dv.style.overflow="hidden";
  dv.style.width=width+"px";
}

function restoreColumn(id, index) {
var tb=document.getElementById(id), dv;
if(tb.rows[0].cells.length<=index) return;
for(var i=0; i<tb.rows.length; i++) {
  dv=tb.rows[i].cells[index].firstChild; //первый элемент в ячейке
  dv.style.position="static";
  dv.style.overflow="visible";
  dv.style.width="auto";
}

HTML
<table width=100 border = 1 id = "t1">
<tr id="tr1">
<td width><span>Test</span></td>
<td><span>Test1Test1Test1Test1Test1Test1</span></td>
<td><span>Test2</span></td>
</tr>
<tr id="tr1">
<td><span>Test</span></td>
<td><span>Test1</span></td>
<td><span>Test2</span></td></tr>
<tr>
<td><span>Test</span></td>
<td><span>Test1</span></td>
<td><span>Test2</span></td>
</tr>
</table>


Писал на вскидку, не проверял. Теперь в коде не создаётся элемент, а предпологается что первый элемент в ячейке это контейнер, так что не забудь span'ы.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Vidocq
Дата 3.2.2005, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



Sardar
Кууульноо!
Сколько плюсов я тебе УЖЕ должен? smile

И последнее: как сделать, чтоб любой столбец мог так себя вести?
Я думаю надо перебрать в цикле все индексы, так?



--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
Sardar
Дата 3.2.2005, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Надо во всех столбцах обернуть содержимое в span, между тегами <td> и <span> не должно быть ничего, даже пробелов, иначе мозилла проглючит.
Если за место строки:
Код
dv=tb.rows[i].cells[index].firstChild;
//поставить это
dv=(tb.rows[i].cells[index].childNodes[0].nodeType!=1)? dv=tb.rows[i].cells[index].childNodes[1]: dv=tb.rows[i].cells[index].childNodes[0];

То мозилла глючить не будет, но сам не люблю подобные патчи, уж лучше пусть народ мозиллу правит либо пробелы между тегами не ставит smile

После юзая функции можно обрезать любую колонку таблицы.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Vidocq
Дата 3.2.2005, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



Sardar
а вот так чего не работает:

Код

<table width=100 border = 1 id = "t1" onmouseon="resizeColumn('t1', 1, 30)" onmouseover="restoreColumn('t1', 1)">
<tr id="tr1">
<td width><span>Test</span></td>
<td><span>Test1Test1Test1Test1Test1Test1</span></td>
<td><span>Test2</span></td>
</tr>
<tr id="tr1">
<td><span>Test</span></td>
<td><span>Test1</span></td>
<td><span>Test2</span></td></tr>
<tr>
<td><span>Test</span></td>
<td><span>Test1</span></td>
<td><span>Test2</span></td>
</tr>
</table>



--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
Vidocq
Дата 3.2.2005, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



Sardar
в том смысле, что если таких колонок будет 2 и больше, то мне надо чтоб они одновременно срезались/восстанавливались.....


--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
Sardar
Дата 4.2.2005, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Vidocq ты попросил пример, я дал его, если совсем не разбираешся в JS, то не надо ходить вокруг да около, говори сразу что нужно smile
Мой код изменяет одну колонку за раз, очевидно если колонок много, то нужно сделать столько же вызовов:
Код
function resizeColumns(id, width, cols) {
 for(var i=0; i<cols.length; i++) resizeColumn(id, cols[i], width);
}
function restoreColumns(id, cols) {
 for(var i=0; i<cols.length; i++) restoreColumn(id, cols[i]);
}

HTML
<table width=100 border = 1 id = "t1" onmouseon="resizeColumns('t1', [1,2], 30)" onmouseover="restoreColumns('t1', [1,2])">
<tr>
<td width><div>Test</div></td>
<td><div>Test1Test1Test1Test1Test1Test1</span></td>
<td><div>Test2</span></td>
</tr>
<tr>
<td><div>Test</div></td>
<td><div>Test1</div></td>
<td><div>Test2</div></td></tr>
<tr>
<td><div>Test</div></td>
<td><div>Test1</div></td>
<td><div>Test2</div></td>
</tr>
</table>


Я ранее немного сглупил, сказав оборачивать содержимое ячеей в span'ы. У тебя в ячейкам может быть что угодно, не только текст, но например и слои. Поэтому оборачивай в DIV'ы.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Vidocq
Дата 4.2.2005, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



Sardar
Спасибо за потраченное на меня время.
Надеюсь, я не сильно тебя утомил своими немного невразумительными просьбами, но я не понимаю, какой окончательный вид должна иметь функция...

я пишу
Код

function resizeColumn(id, width, cols)
{
var tb=document.getElementById(id), dv;
 for(var i=0; i<cols.length; i++)
{

 dv=tb.rows[i].cells[i].lastChild//firstChild; //first element in cell
 dv.style.position="relative";
 dv.style.overflow="hidden";
 dv.style.width=width+"px";
 resizeColumn(id, width, cols[i]);
 }

}

function restoreColumn(id, cols)
{
var tb=document.getElementById(id), dv;
 for(var i=0; i<cols.length; i++)
{

 dv=tb.rows[i].cells[i].lastChild//.firstChild; //first element in cell
 dv.style.position="static";
 dv.style.overflow="visible";
 dv.style.width="auto";
 restoreColumn(id, cols[i]);
 }
}


Код

<table width=100 border = 1 id = "t1" >
<tr>
<td width><div>Test</div></td>
<td><div>Test1Test1Test1Test1Test1Test1</span></td>
<td><div>Test2</div></td>
</tr>
<tr>
<td><div>Test</div></td>
<td><div>Test1</div></td>
<td><div>Test2</div></td></tr>
<tr>
<td><div>Test</div></td>
<td><div>Test1</div></td>
<td><div>Test2</div></td>
</tr>
</table>

new size
<input id = "inWidth">
<input type = "button" onclick="resizeColumn('t1', document.getElementById('inWidth').value, [0,1,2])" value = "apply">

old size
<input type = "button" onclick="restoreColumn('t1', [0,1,2])" value = "restore">


но код не работает. Вернее, работает, но не так, как мне надо... Что неправильно


--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
Sardar
Дата 4.2.2005, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Мдям, функции рекурсивно вызывают сами себя, читай свой код внимательно smile
Код
function resizeColumns(id, width, cols) { //множественное Columns
 var tb=document.getElementById(id), dv;
 for(var i=0; i<cols.length; i++) {
   dv=tb.rows[i].cells[i].firstChild; //first element in cell
   dv.style.position="relative";
   dv.style.overflow="hidden";
   dv.style.width=width+"px";
 }
}

function restoreColumn(id, cols) {
  var tb=document.getElementById(id), dv;
  for(var i=0; i<cols.length; i++) {
     dv=tb.rows[i].cells[i].firstChild; //first element in cell
     dv.style.position="static";
     dv.style.overflow="visible";
     dv.style.width="auto";
  }
}


JS это не тяп-ляп, читай что ты пишешь, исполняй в уме, кучу ошибок предотвратишь smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Vidocq
Дата 4.2.2005, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



Sardar
так не работает smile


--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
Sardar
Дата 5.2.2005, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Покажи код вёрстки, как ты эти функции вызываешь. Вообще пробуй анализировать как что работает, либо поясняй что за ошибка. "Так не работает" - на такое либо телепаты либо парни из "саппорта" ответить могут, я не отношусь ни к первым, ни ко вторым smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Vidocq
Дата 7.2.2005, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



Sardar
"Вспылил, был неправ" (с) smile

Код


function restoreColumn(id, cols)
{
var tb=document.getElementById(id), dv;
//if(tb.rows[0].cells.length<=i) return;
for(var i=0; i<cols.length; i++)
{
 dv=tb.rows[i].cells[i].lastChild//.firstChild; //first element in cell
 dv.style.position="static";
 dv.style.overflow="visible";
 dv.style.width="auto";
 //restoreColumn(id, cols[i]);
 }
}


function resizeColumn(id, width, cols)
{
var tb=document.getElementById(id), dv;
for(var i=0; i<cols.length; i++)
{
 dv=tb.rows[i].cells[i].lastChild//firstChild; //first element in cell
 dv.style.position="relative";
 dv.style.overflow="hidden";
 dv.style.width=width+"px";
 //resizeColumn(id, width, cols[i]);
 }
}


Код


<table width=100 border = 1 id = "t1" >
<tr>
<td width><div>Test</div></td>
<td><div>Test1Test1Test1Test1Test1Test1</span></td>
<td><div>Test2</div></td>
</tr>
<tr>
<td><div>Test</div></td>
<td><div>Test1</div></td>
<td><div>Test2</div></td></tr>
<tr>
<td><div>Test</div></td>
<td><div>Test1</div></td>
<td><div>Test2</div></td>
</tr>
</table>

new size
<input id = "inWidth">
<input type = "button" onclick="resizeColumn('t1', document.getElementById('inWidth').value, [0,1,2])" value = "apply">

old size
<input type = "button" onclick="restoreColumn('t1', [0,1,2])" value = "restore">



--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
Sardar
Дата 7.2.2005, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Вот этот код работает, он очень простой, но лучше не модиффицируй его, если не понимаешь что к чему. Спрашивай что не понимаешь, желательно в другом топике, ибо этот слишком разросся.
HTML
<script language="Javascript" type="text/javascript">
<!--
function resizeColumns(id, width, cols) {
for(var i=0; i<cols.length; i++) resizeColumn(id, cols[i], width);
}
function restoreColumns(id, cols) {
for(var i=0; i<cols.length; i++) restoreColumn(id, cols[i]);
}
function resizeColumn(id, index, width) {
var tb=document.getElementById(id), dv;
if(tb.rows[0].cells.length<=index) return;
for(var i=0; i<tb.rows.length; i++) {
dv=tb.rows[i].cells[index].firstChild; //ïåðâûé ýëåìåíò â ÿ÷åéêå
dv.style.position="relative";
dv.style.overflow="hidden";
dv.style.width=width+"px";
}
}
function restoreColumn(id, index) {
var tb=document.getElementById(id), dv;
if(tb.rows[0].cells.length<=index) return;
for(var i=0; i<tb.rows.length; i++) {
dv=tb.rows[i].cells[index].firstChild; //ïåðâûé ýëåìåíò â ÿ÷åéêå
dv.style.position="static";
dv.style.overflow="visible";
dv.style.width="auto";
}
}
//-->
</script>

<table width=100 border = 1 id = "t1" >
<tr>
<td><div>Test</div></td>
<td><div>Test1Test1Test1Test1Test1Test1</span></td>
<td><div>Test2</div></td>
</tr>
<tr>
<td><div>Test</div></td>
<td><div>Test1</div></td>
<td><div>Test2</div></td></tr>
<tr>
<td><div>Test</div></td>
<td><div>Test1</div></td>
<td><div>Test2</div></td>
</tr>
</table>

new size
<input id = "inWidth">
<input type = "button" onclick="resizeColumns('t1', document.getElementById('inWidth').value, [0,1,2])" value = "apply">

old size
<input type = "button" onclick="restoreColumns('t1', [0,1,2])" value = "restore">


Когда будешь переписывать смотри на число(множественное и т.д. например Columns) smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.4613 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.