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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать обработку группы элементов в FF,Opera? Действия над элементами опр-ного класса 
:(
    Опции темы
Гость_12345
Дата 28.11.2005, 14:38 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











В IE названное действие делается в 2 строчки. Например, надо покрасить группу тегов в цвет.
Код
<script>d=document;
function toColor(c){for(i in d.all.tags('td'))if(d.all[i].className=='r')d.all[i].style.backgroundColor=c;}
</script>
<TABLE border=1>
    <TR><TD id=c1 class=r width=100>.</TD><TD id=c2 width=100>.</TD><TD id=c3 class=r width=100>.</TD></TR>
    <TR><TD id=c4>.</TD>    <TD id=c5 class=r>.</TD>    <TD id=c6>.</TD></TR>
    <TR><TD id=c7>.</TD>    <TD id=c8 class=r>.</TD>    <TD id=c9 class=r>.</TD></TR>
</TABLE>
<a href=# onClick=toColor('red');return!1>class 'r' to Red</a> . . . <a href=# onClick=toColor('');return!1>class 'r' to transparense</a>

При этом .tags('td') можно не писать, всё равно работает.
Обнаружилось, правда, странное свойство, что надо поименовать элементы в разные id. Но ладно, работает.
  • Есть ли в FF аналогичное краткое действие для группы элементов?
  • Почему в Опере 7.54 то же самое не работает? d.all.tags('td').length = 9 , но если поставить alert(i), то выдаёт item, namedItem, tags, и всё, 3 шт., т.е имена функций. Почему не id-ы? Экспериментами установил, что совместимый с Opera и IE код есть
Код
<script>d=document;
function toColor(c){for(i=0;i<d.all.tags('td').length;i++)if(d.all.tags('td').item(i).className=='r')d.all.tags('td').item(i).style.backgroundColor=c;}
</script>
<TABLE border=1>
    <TR><TD id=c1 class=r width=100>.</TD><TD id=c2 width=100>.</TD><TD id=c3 class=r width=100>.</TD></TR>
    <TR><TD id=c4>.</TD>    <TD id=c5 class=r>.</TD>    <TD id=c6>.</TD></TR>
    <TR><TD id=c7>.</TD>    <TD id=c8 class=r>.</TD>    <TD id=c9 class=r>.</TD></TR>
    <TR><TD id=c10>.</TD>    <TD id=c11 class=r>.</TD>    <TD id=c12 class=r>.</TD></TR>
</TABLE>
<a href=# onClick=toColor('red');return!1>class 'r' to Red</a> . . . <a href=# onClick=toColor('');return!1>class 'r' to transparense</a>
, но это не так красиво.
  Вверх
sergejzr
Дата 28.11.2005, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 10
Всего: 360



Для всех браузеров:

document.getElementsByTagName('td');

И смотри всегда в эту справку(ключевое слово DOM):
http://www.mozilla.org/docs/dom/domref/dom_doc_ref50.html

Тогда проблем с совместимостью в 90% случаев не будет smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Ciber SLasH
Дата 28.11.2005, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 24
Всего: 67



document.all поддерживается только в IE, хотя сейчас уже и другие браузеры научились поддерживать.

Как сказал:
Цитата(sergej @ 28.11.2005, 14:43)
Для всех браузеров:

document.getElementsByTagName('td');


пример обхода тиблицы можно увидеть например в моём посте в функции на строке 66: http://forum.vingrad.ru/index.php?showtopi...ndpost&p=569785
для установки цвета нужно будет всего-лишь изменить 71 строку на: obj.rows[i].cells[j].style.backgroundColor = 'red';
PM   Вверх
Гость_12345
Дата 28.11.2005, 16:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











sergej.z, спасибо, для данного примера это подошло, для всех браузеров:
Код
<script>d=document;
function toColorFF(c){for(i=0;i<d.getElementsByTagName('td').length;i++)
    if(d.getElementsByTagName('td').item(i).className=='r')
    d.getElementsByTagName('td').item(i).style.backgroundColor=c;}
</script>
<body onl oad="newImage()"><TABLE border=1>
    <TR><TD id=c1 class=r width=100>.</TD><TD id=c2 width=100>.</TD><TD id=c3 class=r width=100>.</TD></TR>
    <TR><TD id=c4>.</TD>    <TD id=c5 class=r>.</TD>    <TD id=c6>.</TD></TR>
    <TR><TD id=c7>.</TD>    <TD id=c8 class=r>.</TD>    <TD id=c9 class=r>.</TD></TR>
    <TR><TD id=c10>.</TD>    <TD id=c11 class=r>.</TD>    <TD id=c12 class=r>.</TD></TR>
</TABLE>
<a href=# onClick=toColorFF('red');return!1>class 'r' to Red</a>
. . . <a href=# onClick=toColorFF('');return!1>class 'r' to transparense</a><br>
В цикле for-in по-прежнему не хотела работать Опера.
Но общая задача - "окрасить элементы заданного класса в документе", видимо, не решается через коллекции. Можно решить, если всё делать в <span >.
Ciber SLasH, это хорошо для регулярных структур, а у меня задача обработать произвольные деревья в документе и отыскать признаки. Чтобы получить универсальный метод доступа к ним.
  Вверх
Sardar
Дата 29.11.2005, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


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

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



Пораскинув мозгами и почитав о CSS делаем более изящное решение:

Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
    <title>Untitled</title>
<style type="text/css">
td.r {}
.red td.r {
  background-color: red;
}

</style>
</head>
<body>
<script type="text/javascript">
<!--
function changeStyle(en) {
  var t=document.getElementById('test');
  var cl=t.className.replace('red', '');
  cl+=en? ' red': '';
  t.className=cl;
}
//-->
</script>

<table border="1" id="test">
 <colgroup span="3" width="100">
 <tr><td class="r">.</td><td>.</td><td class="r">.</td></tr>
 <tr><td>.</td><td class=r>.</td><td>.</td></tr>
 <tr><td>.</td><td class=r>.</td><td class="r">.</td></tr>
</table>
<span class="but" onclick="changeStyle(true)">Apply 'red' class</span>&nbsp;
<span class="but" onclick="changeStyle(false)">Disable 'red' class</span>

</body>
</html>



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


Unregistered











Sardar, да, это мысль как раз той категории, которую я хотел. Правда, если менять не CSS-свойства, а выполнять действия, как изначально для IE, то не пойдёт, но годится для смены стилей. Но зачем так сложно? Пример должен отражать только суть; эквивалент:
Код
<title>Смена стилей класса по всей таблице (IE,FF,Op)</title>
<style>td.r{}
.red td.r{background-color: red;}
</style>
<body onload=t=document.getElementById('test')>

<table border="1" id="test">
 <colgroup span="3" width="100">
 <tr><td class="r">.</td><td>.</td><td class="r">.</td></tr>
 <tr><td>.</td><td class=r>.</td><td>.</td></tr>
 <tr><td>.</td><td class=r>.</td><td class="r">.</td></tr>
</table>
<span class="but" onclick=t.className='red'>Apply 'red' class</span> - - -
<span class="but" onclick=t.className=''>Disable 'red' class</span>

  Вверх
Sardar
Дата 29.11.2005, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


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

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



Цитата
Но зачем так сложно? Пример должен отражать только суть; эквивалент:

Потому что большинство народу хотят copy/paste и что бы заработало, а 15 постов после обьяснять что ещё нужно не хочеться, вот и выкладываю весь листинг, указываю пустые стили и кодподгоняю так, что бы он работал даже если у тбалицы был задан ранее класс (помним что class аттрибут это список классов через пробел)

Главное что натолкнул тебя на мысль smile
Регистрируйся, а то ходишь среди нас как чужой.


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


 




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


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

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