Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Смена стилей при наведении на таблицу
 
 автор: Avel_Mink   (08.07.2010 в 00:00)   письмо автору
 
 

Проблема в том как сделать, чтобы при наведении курсора на таблицу менялись стили у тегов <td>, находящихся в данной таблице. Простыми средствами я так понял это не решить, может кто поможет.

вот изначальная таблица:

<table>
    <tr>
        <td class="a1">
        </td>
        <td class="a2">
        </td>
        <td class="a3">
        </td>
    </tr>
    <tr>
        <td class="a4">
        </td>
        <td class="a_c">
                    CONTENT
        </td>
        <td class="a5">
        </td>
    </tr>
    <tr>
        <td class="a6">
        </td>
        <td class="a7">
        </td>
        <td class="a8">
        </td>
    </tr>
</table>


и надо сделать чтобы при наведении на эту таблицу менялись стили у всех тэгов <td>, то есть стало вот так:

<table>
    <tr>
        <td class="a1_h">
        </td>
        <td class="a2_h">
        </td>
        <td class="a3_h">
        </td>
    </tr>
    <tr>
        <td class="a4_h">
        </td>
        <td class="a_c">
            CONTENT
        </td>
        <td class="a5_h">
        </td>
    </tr>
    <tr>
        <td class="a6_h">
        </td>
        <td class="a7_h">
        </td>
        <td class="a8_h">
        </td>
    </tr>
</table>


вот код CSS, если надо:

td.a1 {
    width:10px;
    height:10px;
    background-image:url('/img/a/1.png')
}

td.a2 {
    height:10px;
    background-image:url('/img/a/2.png')
}

td.a3 {
    width:10px;
    height:10px;
    background-image:url('/img/a/3.png')
}

td.a4 {
    width:10px;
    background-image:url('/img/a/4.png')
}

td.a_c {
    background-color:#FFFFFF;
    vertical-align:top;
    padding:5px;
}

td.a5 {
    width:10px;
    background-image:url('/img/a/5.png')
}

td.a6 {
    width:10px;
    height:10px;
    background-image:url('/img/a/6.png')
}

td.a7 {
    height:10px;
    background-image:url('/img/a/7.png')
}

td.a8 {
    width:10px;
    height:10px;
    background-image:url('/img/a/8.png')
}
td.a1_h {
    width:10px;
    height:10px;
    background-image:url('/img/a/h1.png')
}

td.a2_h {
    height:10px;
    background-image:url('/img/a/h2.png')
}

td.a3_h {
    width:10px;
    height:10px;
    background-image:url('/img/a/h3.png')
}

td.a4_h {
    width:10px;
    background-image:url('/img/a/h4.png')
}

td.a_c {
    background-color:#FFFFFF;
    vertical-align:top;
    padding:5px;
}

td.a5_h {
    width:10px;
    background-image:url('/img/a/h5.png')
}

td.a6_h {
    width:10px;
    height:10px;
    background-image:url('/img/a/h6.png')
}

td.a7_h {
    height:10px;
    background-image:url('/img/a/h7.png')
}

td.a8_h {
    width:10px;
    height:10px;
    background-image:url('/img/a/h8.png')
}


PS^ Данная конструкция делает вокруг таблицы рамку из картинок если че. Заранее спасибо за помощь

  Ответить  
 
 автор: АЯ   (08.07.2010 в 00:48)   письмо автору
 
   для: Avel_Mink   (08.07.2010 в 00:00)
 

<table id="tbl" onmouseover="myFunc ()" onmouseout="myFunc ()">

<script>
function myFunc ()
{
for (var j = 0, o = document.getElementById ('tbl').getElementsByTagName ('td'), l = o.length; j < l; j++) with (o [j])
if (className.charAt (2) != '_') className = (className.indexOf ('_') < 0) ? (className + '_h') : className.substring (0, 2);
}
</script>

  Ответить  
 
 автор: Avel_Mink   (08.07.2010 в 10:46)   письмо автору
 
   для: АЯ   (08.07.2010 в 00:48)
 

Спасибо огромное, только можно ли подкорректировать немного, чтобы когда курсор убирали возращались изначальные стили, то есть по принципу вкл-выкл

  Ответить  
 
 автор: sim5   (08.07.2010 в 11:13)   письмо автору
 
   для: Avel_Mink   (08.07.2010 в 10:46)
 

Вторую строку перепишите так:
className = (className.indexOf('_') < 0  && className.charAt(2) != '_') ? className + '_h' : className.substring(0, 2);

  Ответить  
 
 автор: Avel_Mink   (08.07.2010 в 12:00)   письмо автору
 
   для: sim5   (08.07.2010 в 11:13)
 

Спасибо большое, все работает
Заметил, что такая конструкция работает только в одном месте, как сделать чтобы можно было такие таблицы использовать много раз на странице ? Прочитал, что в js нет функции getElementByClass, как это можно обойти ?

  Ответить  
 
 автор: Avel_Mink   (08.07.2010 в 12:15)   письмо автору
 
   для: Avel_Mink   (08.07.2010 в 12:00)
 

Нашел вот такую конструкцию, только не знаю как ее правильно прикрутить к моему случаю


<script>
var allTags=new Array();

function getClass(theClass,node,tag,stl,ord) {

if (node==null) node=document;
if (tag==null) tag='*';

var allTags=node.getElementsByTagName(tag);

    for (i=0; i<allTags.length; i++) {

        if (allTags[i].className==theClass) {

        eval('allTags[i].style.'+stl+'=ord');

        }
    }
}
</script>


вызов функции

getClass('имя_класса',null,null,'display','none');

  Ответить  
 
 автор: sim5   (08.07.2010 в 13:25)   письмо автору
 
   для: Avel_Mink   (08.07.2010 в 12:00)
 

Получить коллекцию объектов по имени класса можно в JS, и для этого не обязательно должна быть в нем функция getElementByClass, писать нужно свою, пользовательскую, как это сделано, например, в jQuery.
Код предложенный вам АЯ, тоже можно использовать ко многим таблицам, например:
<style>
.a1 {background:#f08080}
.a2 {background:#1e90ff}
.a1_h {background:#32cd32}
.a2_h {background:#32cd32}
.b1 {background:#daa520}
.b2 {background:#bdb76b}
.b1_h {background:#ff0000}
.b2_h {background:#ff0000}
</style>

<script> 
function myFunc(obj, cls) {
  //cls имя класса при необходимости 
  for(var j = 0, o = document.getElementById(obj).getElementsByTagName('td'), l = o.length; j < l; j++) with(o[j]) 
  className = (className.indexOf ('_') < 0) ? className + '_h' : className.substring(0, 2); 

</script>

<table id="as1" onmouseover="myFunc('as1')" onmouseout="myFunc('as1')">
<tr>
  <td class="a1">aaaaaaaa</td>
  <td class="a2">aaaaaaaa</td>
</tr>
<tr>
  <td class="a1">aaaaaaaa</td>
  <td class="a2">aaaaaaaa</td>
</tr>
</table>

<table id="as2" onmouseover="myFunc('as2')" onmouseout="myFunc('as2')">
<tr>
  <td class="b1">aaaaaaaa</td>
  <td class="b2">aaaaaaaa</td>
</tr>
<tr>
  <td class="b1">aaaaaaaa</td>
  <td class="b2">aaaaaaaa</td>
</tr>
</table>

Нужно лишь описать необходимое количество аргументов, условий...

  Ответить  
 
 автор: АЯ   (08.07.2010 в 15:29)   письмо автору
 
   для: Avel_Mink   (08.07.2010 в 10:46)
 

Тогда так - для любого количества таблиц:
<table onmouseover="myFunc (this)" onmouseout="myFunc (this)">

<script>
function myFunc (x)
{
for (var j = 0, o = x.getElementsByTagName ('td'), l = o.length; j < l; j++) with (o [j])
{var t = className; if (t.charAt (1) != '_') className = (t.indexOf ('_') < 0) ? (t + '_h') : t.substring (0, 2)}
}
</script>
Ошибку в номере символа charAt (2) я исправил.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования