как обратиться к таблице из ячейки
Всем привет. Например есть таблица
<table id="table" width="300px" height="200px"> <tr> <td>...</td> <td>...</td> <td>...</td> </tr> <tr> <td>...</td> <td>...</td> <td>...</td> </tr> <tr> <td>...</td> <td>...</td> <td>...</td> </tr> </table> Мне нужно что бы при кликанье по любой ячейки можно было добраться до параметров таблицы,т.е в нашем случае до width и height ну и id. вставляю в ячейки <td> следующий код <td onclick="alert(this.parentNode.parentNode.id);">...</td> alert выдает пустоту, как же добраться до основного родителя из ячейки?? :( |
Ещё один parentNode вам поможет, ибо tbody.
Но по-хорошему надо просто сделать нужные переменные, чтоб не лезть каждый раз. |
tbody помогло :)
спасибо |
Aetae, аха) Я сейчас тоже потихоньку перехожу к изученю объектной модели (DOM). По идее, немного странно, ведь тег <tbody> не упоминается при построении таблицы.
simple, может это пригодится Выделение строки и столбца относящихся к ячейке таблицы <td onclick="alert(this.offsetParent.nodeName);">...</td> |
nerv_ спасибо, красивый способ, все работает :)
|
У меня вот еще вопрос возник..написал функцию которая создает макет модального окна, некоторым элементам присваиваю id для дальнейшей обработки, например для resiza id="left" id="top" и.т.д. Если я создам этой функцией несколько окон то ничего страшного не будет если будут дублироваться id-ы. Так то пробовал все работает, ошибку вроде не выдает,(что удивительно ведь id должен быть уникальный) просто хотелось узнать может есть более правильный способ?
|
Цитата:
Только поддерживать ту уникальность должен разработчик. ;) |
Вообще конечно с id это фэил в первую очередь разрабов, а уж потом начинающих прогеров: отсутствие изначально способа группировки элементов.
Уникальный идентификатор есть, а групповго нет. Есть name, но не для любого элемента. Есть class, но во-первых не для того он придуман, во вторых - ie. И приходится всем юзать class=( |
решил тогда отказаться от id и добираться до нужных элементов с помощью ветвлений childNodes и parentNode..Но тут тоже без сюрпризов не обходиться, вот например таблица расположенная в теги <div>:
<div> <table id="table">// obj.childNodes[1].id выведет "table" <thead id="thead">// obj.childNodes[1].childNodes[1].id выведет "thead" <tr> <th>...</th> <th>...</th> <th>...</th> </tr> </thead> <tbody id="tbody">//obj.childNodes[1].childNodes[2].id выведет "undefined" ???? <tr>// а вот obj.childNodes[1].childNodes[3].id покажет "tbody" <td>...</td> <td>...</td> <td>...</td> </tr> </tbody> </table> </div> Собственно вопрос что находиться в obj.childNodes[1].childNodes[2].id ??? Почему такой перескок через цифру ведь по идеи tbody должна быть вторым ребенком у таблице? |
Цитата:
<table> <thead> ... </thead> *!* <tfoot> <tr> <td> ... </td> </tr> </tfoot> */!* <tbody> ... </tbody> </table> http://htmlbook.ru/html/tfoot |
childNodes включает в себя текстовые ноды
obj.childNodes[1].childNodes[2] - '\n' Можно юзать children //ff3.6+ ...но не нужно) А нужно вам скорее всего getElementsByTagName() |
точно getElementsByTagName()! да и по поводу тега <foot> тоже новость, не знал что он именно так позиционируется в таблице :)
Вот еще вопрос, можно ли как нибудь в этом диве зафиксировать шапку таблицы т.е <thead> чтобы при скролле она стояла на месте? игрался с position..не выходит что то. <div style="overflow:auto;width:300px;height:150px;"> <table> <thead>// Нужно чтоб это не прокручивалась..как бы это сделать :help: <tr> <th>...</th> <th>...</th> <th>...</th> </tr> </thead> <tbody id="tbody"> <tr> <td>...</td> <td>...</td> <td>...</td> </tr> </tbody> </table> </div> |
Цитата:
Но она с "оговорками". Т.е. не всё так просто... |
simple, может быть position: absolute/fixed. Хотя насчет части таблицы не уверен.
|
Цитата:
|
nerv_ ,нет absolute/fixed не подходят, так как при таком позиционирование они выходят за область дива...сделал position:relative и добавил js на скролл...работает..но что то первая ячейки в теги <tbody> расширяются на весь <thead>. Вот пример:
<script>
function scrolltmp(obj,num){
obj.childNodes[1].childNodes[1].style.top=num;
}
</script>
<div style="width:300px;height:120px;overflow:auto;" onscroll="scrolltmp(this,scrollTop);">
<table border=1 style="border-collapse:collapse;">
<thead style="position:relative;top:0px;left:0px;display:block;">
<tr>
<th>...</th>
<th>...</th>
<th>...</th>
<th>...</th>
<th>...</th>
<th>...</th>
<th>...</th>
</tr>
</thead>
<tbody>
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
//......................................
</tbody>
</table>
</div>
вероятно это из-за display:block но без него не работает, как можно исправить это или альтернативный вариант какой нибудь есть? ЗЫ да и не оптимальное это решение а так просто понять суть тока...при прокрутке заголовок дергается =) |
Примеры есть но их хрен найдёшь здесь.)
Если надо на js гугли javscript fixed header Если на чистом css, вот мой велосипед): http://javascript.ru/forum/95221-post23.html |
Цитата:
Я просто для себя суть тех примеров запомнил... Если припрёт - детали вспомнятся по ходу дела... :D |
Идейка с шапкой таблицы там используется вот такая...
<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
* {
margin: 0;
padding: 0;
}
#container {
position: relative;
border: 1px solid red;
}
.tab {
height: 31px;
}
table {
border-collapse: collapse;
}
th {
height: 30px;
}
th,
td {
width: 50px;
border: 1px solid;
}
thead {
position: absolute;
top: 0;
}
.table_data {
height: 50px;
overflow: auto;
}
</style>
<script type="text/javascript">
</script>
</head>
<body>
<div id='container'>
<div class='tab'></div>
<div class='table_data'>
<table>
<thead>
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>2</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>3</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>4</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>5</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
|
С фиксированной шириной то это раз плюнуть, вообще заморачиваться не нужно.)
А если используешь js то сделать её фиксированной и вся недолга. Вообще - основная проблема в ie. Ваш КО. |
С JSом-то конечно! :D
|
таблицу с фиксированным заголовком я делать умею :D
я делаю модальное окно и мне нужно чтобы именно в окне, т.е в div фиксировалась шапка таблицы. |
Цитата:
В моём примере, именно в диве шапка и фиксируется... |
Да это не то, это как обычная таблица с фиксированным заголовком...правда все это можно сделать и без этой кучи div и js..просто одна таблица и tbody overflow...мне же нужно чтобы обыяная таблица была в окне div и у которй шапка была бы закреплена. Это для модальног окна мне надо, чтоб можно было растягивать перемещать и.т.д
|
Нарисуйте, а?
Тут даже мои телепатические навыки пасуют. |
Цитата:
|
ну я для себя так делаю когда мне нужны такие таблицы:
<html>
<head>
<style type="text/css">
table,tbody
{
display: inline-block;
}
tbody
{
width:100%;
height: 100px;
overflow: auto;
overflow-x:hidden;
}
td
{
min-width: 60px;
text-align:left;
}
</style>
</head>
<body>
<table border=1 style="border-collapse:collapse;font-family:ms sans serif;font-size:11px;background:#fff;">
<thead>
<tr bgcolor=#ccc>
<td>aaa</td>
<td>bbb</td>
<td>ccc</td>
<td>ddd</td>
<td>eee</td>
</tr>
</thead>
<tbody>
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
</tbody>
</table>
</body>
</html>
:) |
Работает только в ff
|
не знаю...у меня и в опере и сафари и в хроме пашет + фф..ну на ие я забил уже давно )
|
simple, CSS: display
|
Похоже невозможно сделать то что я хочу таким обычным способом, просто div с overflow не подходит..придется юзать плавающии фреймы..и как я раньще про них не вспомнил, ведь они идеально подходят для модальных окон и код-логику окна можно разделить раскидав их по нужным фреймам, а не загружать весь код в одной странице html...эврика вообщем! :write:
|
что то скроллинг никак в iframe сделать не получается..
<iframe src="table.html" scrolling="yes" width="300" height="200"></iframe> в хроме, опере,фф,сафари нету скролла..в убогом ИЕ есть |
| Часовой пояс GMT +3, время: 00:53. |