我做了一個腳本,檢測表中的行頭和子頭與colspans,但沒有rowspans:
jQuery('#yourTable tbody td').bind('click',function(e) {
var tr = jQuery(e.target).parent('tr');
var y = parseInt(jQuery('tr', this).index(tr));
var x = parseInt(tr.children('td').index(jQuery(e.target)));
var jTdFecha = tr.find('td:first');
var sFecha = jTdFecha.text();
var arrCeldas = {};
var arrEncabezados = {};
var arrJFila = {};
var nTemp = 0;
var jTdEncabezadoFecha,nCantCabeceras,jTemp, nI, nJ, nK, nL, bTemp;
arrJFila[1]={
'arrHijos' : jQuery('#yourTable tbody tr:first-child')
};
jTdEncabezadoFecha = arrJFila[1]['arrHijos'].find('td:first');
nCantCabeceras = jTdEncabezadoFecha.attr('rowspan');
for(nI=1;nI<=nCantCabeceras;nI++){
if(nI>1){
arrJFila[nI]={
'arrHijos' : arrJFila[nI-1]['arrHijos'].next()
};
}
arrCeldas[nI] = {
'arrHijos' : arrJFila[nI]['arrHijos'].children(),
'arrColspan' : {},
'arrRowspan' : {},
'nCant' : '',
'arrLastIndex' : {},
'arrLastSavedColspan': {},
'arrLastColspan': {}
};
for(nJ=0;nJ<=nCantCabeceras;nJ++){
arrCeldas[nI]['arrLastIndex'][nJ] = 0;
arrCeldas[nI]['arrLastColspan'][nJ] = 0;
arrCeldas[nI]['arrLastSavedColspan'][nJ] = 0;
}
}
for(nI=1;nI<=nCantCabeceras;nI++){
arrCeldas[nI]['nCant'] = arrCeldas[nI]['arrHijos'].length;
nTemp = 0;
for(nJ=0;nJ<arrCeldas[nI]['nCant'];nJ++){ //Recorremos todas las celdas de cada cabecera
jTemp = jQuery(arrCeldas[nI]['arrHijos'][nJ]);
arrCeldas[nI]['arrColspan'][nJ] = parseInt(jTemp.attr('colspan'));
arrCeldas[nI]['arrRowspan'][nJ] = parseInt(jTemp.attr('rowspan'));
if(nI>1){
for(nK=1;nK<nCantCabeceras;nK++){
arrCeldas[nI]['arrLastColspan'] = arrCeldas[nI]['arrLastColspan'];
if (nI-nK>0){
//Recorremos las cabeceras anteriores
bTemp = nK==1?true:((arrCeldas[nI]['arrLastColspan'][nK]<=arrCeldas[nI]['arrLastColspan'][nK-1]));
if(bTemp){
if(nI-nK==1){
bTemp = (arrCeldas[nI]['arrLastColspan'][nK]<nTemp);
}
}
//console.warn('nI: '+nI+' nK: '+nK+' arrLastColspan[nK='+nK+']:'+arrCeldas[nI]['arrLastColspan'][nK]+' arrLastColspan[nK-1='+(nK-1)+']:'+arrCeldas[nI]['arrLastColspan'][nK-1]);
if(bTemp){
for(nL=arrCeldas[nI]['arrLastIndex'][nK];nL<arrCeldas[nK]['nCant'];nL++){
if((parseInt(arrCeldas[nK]['arrRowspan'][nL])<=1) || isNaN(parseInt(arrCeldas[nK]['arrColspan'][nL]))){
arrCeldas[nI]['arrLastIndex'][nK] = nL + 1;
if(isNaN(parseInt(arrCeldas[nK]['arrColspan'][nL]))==false){
if((arrCeldas[nI]['arrLastColspan'][nK]<=arrCeldas[nI]['arrLastSavedColspan'][nK-1]) || (nK==1)){
arrCeldas[nI]['arrLastColspan'][nK] += arrCeldas[nK]['arrColspan'][nL];
}
}
break;
nL = 999999; //salimos del FOR.
}
if(nL!= 999999){
if(isNaN(parseInt(arrCeldas[nK]['arrColspan'][nL]))==false){
if(arrCeldas[nI]['arrLastColspan'][nK]<=arrCeldas[nI]['arrLastSavedColspan'][nK-1]){
arrCeldas[nI]['arrLastColspan'][nK] += arrCeldas[nK]['arrColspan'][nL];
}
nTemp += arrCeldas[nK]['arrColspan'][nL];
}
}
//console.warn(isNaN(parseInt(arrCeldas[nK]['arrColspan'][nL]))+':'+parseInt(arrCeldas[nK]['arrColspan'][nL])+' nI:'+nI+' nL:'+nL+' nK:'+nK+' text: '+jQuery(arrCeldas[nK]['arrHijos'][nL]).text()+' arrLastColspan[nK='+nK+']:'+arrCeldas[nI]['arrLastColspan'][nK]+' arrLastIndex[nK='+nK+']:'+arrCeldas[nI]['arrLastIndex'][nK]);
}
}
}
}
//console.warn('nI: '+nI+' nJ: '+nJ+' pre: x:'+x+' nTemp:'+ nTemp);
if(x<=(nTemp-1)){
arrEncabezados[nI] = '';
break;
nJ = 999999; //salimos del FOR.
}
}
if(nJ!= 999999){
nTemp += arrCeldas[nI]['arrColspan'][nJ];
if(x<=(nTemp-1)){
for(nK=1;nK<=nCantCabeceras;nK++){
arrCeldas[nK]['arrLastSavedColspan'][nI] = nTemp;
}
arrEncabezados[nI] = jTemp.text();
break;
nJ = 999999; //salimos del FOR.
}
}
//console.warn('nI: '+nI+' nJ: '+nJ+' post: x:'+x+' nTemp:'+ nTemp+' text:'+jTemp.text()+' arrLastColspan [0]:'+arrCeldas[nI]['arrLastColspan'][0]+' [1]:'+arrCeldas[nI]['arrLastColspan'][1]+' [2]:'+arrCeldas[nI]['arrLastColspan'][2]+'[3]:'+arrCeldas[nI]['arrLastColspan'][3]+' arrLastSavedColspan [0]:'+arrCeldas[nI]['arrLastSavedColspan'][0]+' [1]:'+arrCeldas[nI]['arrLastSavedColspan'][1]+' [2]:'+arrCeldas[nI]['arrLastSavedColspan'][2]+'[3]:'+arrCeldas[nI]['arrLastSavedColspan'][3]);
}
}
console.warn(arrEncabezados[1]+' '+arrEncabezados[2]+' '+arrEncabezados[3]+' bTemp: '+bTemp+' nCantCabeceras: '+nCantCabeceras+' Fecha:'+sFecha+' ¿se ve fecha?:'+(isScrolledVerticalIntoView(jTdFecha.get(0))&&isScrolledHorizontalIntoView(jTdFecha.get(0)))+' ¿se ve encabezado?:'+(isScrolledVerticalIntoView(jTdEncabezadoFecha.next().get(0))&&isScrolledHorizontalIntoView(jTdEncabezadoFecha.next().get(0))));
tr = '';
y = '';
x = '';
jTdFecha = '';
sFecha = '';
arrCeldas = '';
arrEncabezados = '';
arrJFila = '';
nTemp = '';
jTdEncabezadoFecha = '';
nCantCabeceras = '';
jTemp = '';
nI = '';
nJ = '';
nK = '';
nL = '';
bTemp = '';
})
我還在思考如何與檢測行rowspans
不,它與另一個庫不衝突 - 它們的代碼以某種方式破壞了jQuery,並且我無法確定沒有它們的源代碼,我不知道這些代碼。 – 2009-09-29 23:57:27