Участник+


Зарегистрирован: Mar 2003
Место проживания: Барнаул, Россия
Публикаций: 1169
Статус: ![he][es в оф-лайне](images/offline.gif) |
Итак, продолжаем тему
http://www.netadmin.ws/forum/showth...s=&postid=79432
сгенерили мы табличку. Теперь нужно сделать так, что бы столбцы и строки сворачивались и разворачивались в соответствеии с древовидной структурой.
Есть 2 стыренные функции:
PHP:
function ChangeColumnVisibility(strVisibility, intColumnNumber) {
if(navigator.product == "Gecko" && navigator.productSub && navigator.productSub > "20041010" && (navigator.userAgent.indexOf("rv:1.8") != -1 || navigator.userAgent.indexOf("rv:1.9") != -1)) { // Mozilla 1.8alpha; see bug 76497 and bug 242368; must be higher than 1.7.x
var ColumnCollection = document.getElementById("limit_list").getElementsByTagName("col");
ColumnCollection[intColumnNumber].style.visibility = strVisibility;
} else if(document.all && !window.opera && document.compatMode && document.compatMode == "CSS1Compat") {
var ColumnCollection = document.getElementById("limit_list").getElementsByTagName("col");
if(strVisibility == "visible") {
ColumnCollection[intColumnNumber].style.display = "block";
} else if(strVisibility == "collapse") {
ColumnCollection[intColumnNumber].style.display = "none";
}
} else if(document.addEventListener) { // Mozilla and Opera 7.x
var TDCollection = document.getElementById("limit_list").getElementsByTagName("td");
for(var CellIterator = 0; CellIterator < document.getElementById("limit_list").rows.length; CellIterator ++) {
if(strVisibility == "visible") {
document.getElementById("limit_list").rows[CellIterator].cells[intColumnNumber].style.display = "table-cell";
} else if(strVisibility == "collapse") {
document.getElementById("limit_list").rows[CellIterator].cells[intColumnNumber].style.display = "none";
}
}
}
}
function ChangeRowVisibility(strVisibility, intRowIndex) {
if(navigator.product == "Gecko" && navigator.productSub && navigator.productSub > "20041010" && (navigator.userAgent.indexOf("rv:1.8") != -1 || navigator.userAgent.indexOf("rv:1.9") != -1)) {
/*
Mozilla 1.8alpha; see bug 77019 and bug 242368; must be higher than 1.7.x
Mozilla 1.8a2 supports accordingly dynamic collapsing of rows in both border-collapse models
but not 1.7.x versions */
document.getElementById("limit_list").rows[intRowIndex].style.visibility = strVisibility;
} else if(strVisibility == "visible") {
if(document.all && document.compatMode && document.compatMode == "CSS1Compat" && !window.opera) {
document.getElementById("limit_list").rows[intRowIndex].style.display = "block";
} else if(document.getElementById && document.getElementById("limit_list").rows) { // Mozilla prior to 1.8a2, Opera 7.x and MSIE 5+
document.getElementById("limit_list").rows[intRowIndex].style.display = "table-row";
document.getElementById("limit_list").rows[intRowIndex].style.visibility = strVisibility;
}
} else if(strVisibility == "collapse") {
document.getElementById("limit_list").rows[intRowIndex].style.display = "none";
if(document.getElementById("limit_list").rows[intRowIndex].style.visibility) document.getElementById("limit_list").rows[intRowIndex].style.visibility = strVisibility;
}
}
Т.е. показать скрыть столбец/колонку проблем нет. И впринципе то всё работает, вопрос в том как?! и сколько... а работает плохо и ООООЧень долго...
Делаю я это так:
PHP:
function rowz() {
if (req.readyState == 4) {
if (req.status == 200) {
response = req.responseXML.documentElement;
result = response.getElementsByTagName('result')[0].firstChild.data;
if(result != 0) {
level = response.getElementsByTagName('level')[0].firstChild.data;
cleft = response.getElementsByTagName('cleft')[0].firstChild.data;
cright = response.getElementsByTagName('cright')[0].firstChild.data;
parent_id = response.getElementsByTagName('parent')[0].firstChild.data;
if(parent_id != 0) {
loadXMLDoc('parent_row', 'http://stat/api.php?act=get_str_kks&id='+parent_id);
}
cur_string = document.getElementById('tr_'+level+'_'+cleft);
next_level = Number(level)+1;
if(cur_string.firstChild.childNodes[0].value == 'hide' && (document. getElementById('tr_'+next_level+'_'+(Number(cleft) +1)).style.display == "none" || document. getElementById('tr_'+next_level+'_'+(Number(cleft) +1)).style.visibility == "collapse")) {
for(c=Number(cleft); c<=Number(cright); c++) {
if (document.getElementById('tr_'+next_level+'_'+c)) { ChangeRowVisibility('visible', document.getElementById('tr_'+next_level+'_'+c).rowIndex); }
}
cur_string.firstChild.childNodes[0].value = 'show';
cur_string.firstChild.childNodes[1].src = '/images/minimise.gif';
} else if (cur_string.firstChild.childNodes[0].value == 'show' || ((document. getElementById('tr_'+next_level+'_'+(Number(cleft) +1)).style.display == "table-row" || document. getElementById('tr_'+next_level+'_'+(Number(cleft) +1)).style.display == "block") || document. getElementById('tr_'+next_level+'_'+(Number(cleft) +1)).style.visibility == "visible")) {
for(x=Number(next_level); x<=Number(kks_max_level); x++) { for(c=Number(cleft); c<=Number(cright); c++) {
if (document.getElementById('tr_'+x+'_'+c)) { act_string = document.getElementById('tr_'+x+'_'+c); ChangeRowVisibility('collapse', act_string.rowIndex); if(act_string.firstChild.childNodes[0] && act_string.firstChild.childNodes[1]) { act_string.firstChild.childNodes[0].value = 'hide'; act_string.firstChild.childNodes[1].src = '/images/maximise.gif'; } }
}}
cur_string.firstChild.childNodes[0].value = 'hide';
cur_string.firstChild.childNodes[1].src = '/images/maximise.gif';
}
}
}}
}
сюда нам приходит XMLка с информацией о "ветке" на которую мы нажали, (как правильно посоветовал Xrobak про деревья посм. можно здесь http://phpclub.ru/detail/article/db_tree) её id, left, right, level, parent, etc. Вот в таком виде:
code:
Мы её (XMLку) разобрали, и знаем, какие элементы нужно показать/скрыть. Но перебор с 2 до 61 вида
for(c=Number(cleft); c<=Number(cright); c++) {
if (document.getElementById('tr_'+next_level+'_'+c)) { ChangeRowVisibility('visible', document.getElementById('tr_'+next_level+'_'+c).rowIndex); }
}
для показа и
for(x=Number(next_level); x<=Number(kks_max_level); x++) { for(c=Number(cleft); c<=Number(cright); c++) {
if (document.getElementById('tr_'+x+'_'+c)) { act_string = document.getElementById('tr_'+x+'_'+c); ChangeRowVisibility('collapse', act_string.rowIndex); }
}}
для скрытия работают ОЧЕНЬ долго...
ТАк же стоит упомянуть о размерах таблицы (100строк Х 70столбцов).
Вот. И совственно вопрос, ПОМОГИТЕ ОПТИМИЗИÐ_ОВАТЬ Ð_ТУ ХÐ_ЕНЬ!
Что бы работало правильно и быстро... У меня уже мозги пухнут!
__________________
Админ - вождь Апачей...
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|