Ver Mensaje Individual
  #3 (permalink)  
Antiguo 22/06/2009, 02:44
gallegoindomito
 
Fecha de Ingreso: junio-2009
Mensajes: 9
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Como leer hipervínculos xml desde js...???

Hola:

Ya he superado el problema: Resulta que he creado una tabla xml en la que en la primera columna defino el texto del enlace y en la segunda columna el hipervínculo.
Me recorro la tabla con un bucle de javascript pero a la hora de presentar la información en pantalla no me dejaba asociar la columna de texto al hipervinculo.
Finalmente me dí cuenta de que podía generar la presentación leyendo el registro y asociando el texto al href, en la misma línea.

enl=x[g].getElementsByTagName("enlace")[0].childNodes[0].nodeValue;
cent=x[g].getElementsByTagName("centro")[0].childNodes[0].nodeValue;
document.write("<a href='../ enl+"/arbol_1.html' style='cursor:pointer' target='_parent' onfocus='this.blur()'>"+cent+"</a>");
document.write("</td><td>");

teniendo en el xml, como ya he indicado una columna con enlace y otra con texto.

Ahora me encuentro con que no puedo ordenar las columnas con hipervínculos (me las ordena pero mal), pero sí las de texto simple (correctamente).

El algoritmo de ordenación que utilizo es:

var table=function(){
function sorter(n){
this.n=n; this.t; this.b; this.r; this.d; this.p; this.w; this.a=[]; this.l=0
}
sorter.prototype.init=function(t,f){
this.t=document.getElementById(t);
this.b=this.t.getElementsByTagName('tbody')[0];
this.r=this.b.rows; var l=this.r.length;
for(var i=0;i<l;i++){
if(i==0){
var c=this.r[i].cells; this.w=c.length;
for(var x=0;x<this.w;x++){
if(c[x].className!='nosort'){
c[x].className='head';
c[x].onclick=new Function(this.n+'.work(this.cellIndex)')
}
}
}else{
this.a[i-1]={}; this.l++;
}
}
if(f!=null){
var a=new Function(this.n+'.work('+f+')'); a()
}
}
sorter.prototype.work=function(y){
this.b=this.t.getElementsByTagName('tbody')[0]; this.r=this.b.rows;
var x=this.r[0].cells[y],i;
for(i=0;i<this.l;i++){
this.a[i].o=i+1; var v=this.r[i+1].cells[y].firstChild;
this.a[i].value=(v!=null)?v.nodeValue:''
}
for(i=0;i<this.w;i++){
var c=this.r[0].cells[i];
if(c.className!='nosort'){c.className='head'}
}
if(this.p==y){
this.a.reverse(); x.className=(this.d)?'asc':'desc';
this.d=(this.d)?false:true
}else{
this.p=y; this.a.sort(compare); x.className='asc'; this.d=false
}
var n=document.createElement('tbody');
n.appendChild(this.r[0]);
for(i=0;i<this.l;i++){
var r=this.r[this.a[i].o-1].cloneNode(true);
n.appendChild(r); r.className=(i%2==0)?'even':'odd'
}
this.t.replaceChild(n,this.b)
}
function compare(f,c){
f=f.value,c=c.value;
var i=parseFloat(f.replace(/(\$|\,)/g,'')),n=parseFloat(c.replace(/(\$|\,)/g,''));
if(!isNaN(i)&&!isNaN(n)){f=i,c=n}
return (f>c?1:(f<c?-1:0))
}
return{sorter:sorter}
}();

Con la llamada:

var sorter=new table.sorter("sorter");
sorter.init("centros",1);

Teniendo una lista xml de unas 20 columnas.

Gracias por el interes.