|
|
|
|
|
для: SHAman
(03.08.2006 в 14:54)
| | Dc' равно, ощутимое время занимает обращение к объекту документа (к тому же, с визуальным эффектом).
Поэтому с классом лучше - обращается за 1 раз. Устройте для IE динамические стили, так, чтобы Опера с ними не работала. Как с ними работать - здесь: | |
|
|
|
|
|
|
|
для: 12345
(03.08.2006 в 14:43)
| | А если сделать массив всех обрабатываемых элементов при загрузке страницы, а потом гонять цикл только по ним?
При этом будет стационарным столбец, а строка будет шевелиться.
Будет меньше тормозить?
ЗЫ. Кста, в Oper'e и в FF идет гораздо быстрее! В FF вообще летает! | |
|
|
|
|
|
|
|
для: SHAman
(03.08.2006 в 14:25)
| | Это только скрипт, а в каждой ячейке нужно
<td id=r10_c12 onmouseover=select_all(this,"selected") onmouseout=select_all(this,"notselected")>
| По 30 обращений к объекту документа на каждое движение - конечно, много, поэтому притормаживает. | |
|
|
|
|
|
|
|
для: 12345
(02.08.2006 в 23:56)
| | Большое спасибо за поддержку. Написал. Правда, подтормаживает, но ничего. Полный код выглядит так:
<style>
.selected {background-color:silver;}
.notselected {background-color:wite;}
</style>
<script language="javascript">
function select_all(id,needclass) {
cell=id.replace(/r\d+_c/,"");
cell=parseInt(cell);
for (var i=1;i<15;i++) {
var obj=document.getElementById("r"+i+"_c"+cell);
obj.className=needclass;
}
}
function chClass(needclass) {
this.className=needclass;
}
</script>
|
Еще раз большое спасибо. Этот форум - просто счастье для чайников типа меня! | |
|
|
|
|
|
|
|
для: SHAman
(02.08.2006 в 19:09)
| | ev - это параметр функции=обработчика, который действителен в FF и равен объекту Event . Так что он уже есть, получать не нужно.
Если у тебя в атрибуте тега - onmouseover=... , то надо писать иначе:
<td onmouseout=ff(event, др.параметры) onmouseover=onmouseout=ff(event, др.параметры) >
...
ff=function(ev){...t=d.all?ev.srcElement:ev.target; ...}
| Как видишь, намного больше писать. Хотя, можно
<td onmouseout=ff(event,this, др.параметры) onmouseover=onmouseout=ff(event, this, др.параметры) >
...
ff=function(ev,t, др.){...t уже имеем. он не всегда target, но всё равно то, что нужно...}
|
d.onmouseout=d.onmouseover=function(ev) - это присваивание функции 2 обработчикам прерываний | |
|
|
|
|
|
|
|
для: 12345
(02.08.2006 в 18:33)
| | Да. Скрипт заработал, но только под IE. Под FF не идет. Видел как у тебя в скрипте. Ща попробую у себя так сделать....
Щас такой расклад: событие вызывает функцию, с аргументом - именем класса. Этот класс присваивается всем ячейкам, которые нужны.
Ща попробую отладить.
Кстати, под FF все летает, а под IE подтормаживает... неужто из-за цикла? Не может быть! Всего 14 итераций! Или из-за GetElemenById?
На тему кроссбраузерности:
Строка:
t=d.all?event.srcElement:ev.target;
|
Как взять ev? В скрипте фраза:
d.onmouseout=d.onmouseover=function(ev)
|
мне не очень ясна. В принципе, мне нужно получить значение этого самого ev. Как это попроще? | |
|
|
|
|
|
|
|
для: SHAman
(02.08.2006 в 18:13)
| | Да но это для IE - event.srcElement . Чтобы и для FF, см., как я в примере делал.
<script>alert("r14_c12".match(/\d+/g))</script> - так сразу массив "строка-столбец".
Ид-ы, всё же, идеологически неверно. Привыкай к классовому мышлению. Достаточно знать, какого класса ячейка, так тут же новый цвет ей приклеиваешь.
Если бы дело не касалось Оперы, можно было бы применить динамические стили. Назначаешь стиль столбцу нужного класса. А циклы - это всё мелкобуржуазно... | |
|
|
|
|
|
|
|
для: 12345
(02.08.2006 в 16:59)
| |
curid=event.srcElement.id;
row=curid.replace(/r/,"");
row=parseInt(row);
cell=curid.replace(/r\d_c/,"");
cell=parseInt(cell);
|
Так я получил номер ячейки и строки. Теперь цикл... Строка выделяется переключаемыми стилями. Посмотрим дальше... | |
|
|
|
|
|
|
|
для: 12345
(02.08.2006 в 16:59)
| | Спасибо большое. Уже почти все работает. То есть, выделяет строку. Замечательно. Для выделения столбца текущего, нужно всетки перебирать цикл. А от сюда...
Вопросы с регулярными выражениями. Символы, внутри них - это только наполнение? Потому что если нет, то оно вообще отказывается работать. Если не наполнение, то чет оно тоже не работает. Повторюсь, формат id такой: r14_c12. Нельзя ли конкретизировать регэксп? Спасибо заранее.
ЗЫ. Всетаки хорошо, что есть форум, на котором отвечают даже на такие дибильные вопросы, да еще быстро и без фраз типа "Ну уморил! Ну и ламер!%)" Респект всем, кто помогает учащимся! | |
|
|
|
|
|
|
|
для: SHAman
(02.08.2006 в 14:55)
| | Если число строк огромное, то тем более надо избегать скриптов цикла по строкам - представляешь, сколько бы он работал? Или нужна оптимизация - окрашивать только в пределах видимости.
Да, TR.
event.parentNode.className=...; - окраска строки, тогда классы описать только по столбцам.
15 - не такое уж огромное, я представил, что 10000. И 25 столбцов при 8-10 символах в CSS на столбец - разве это много?
Ответы: 1) event.srcElement.id / event.target.id ;
2) thisId.replace(/-.+/,"") - номер строки; /[^_]+_/,"" - номер столбца. | |
|
|
|
|