Domanda

devo scrivere del codice che ciclo se tutte le righe di una tabella, quindi controllare un input nascosto in ogni riga per vedere se contiene un certo valore e in tal caso impostare alcuni valori e nascondere la riga. Potrebbe essere goffo, ma ha funzionato: ( "Zeile" variabile contiene la prima riga, viene inizializzato correttamente prima del ciclo):

while (goon) {
  var hf = zeile.attr('id');
  if (hf) {
      hf = document.getElementById(hf.substr(0,hf.length-2) + 'hfMat');
      if (hf.value == mid) {
          found=true;
          goon=false;
          zeile.hide();
     } else {
         cnt +=1 ;
         if (cnt<10) {
               alert('not found, cnt=' + cnt);
            } else {
               goon=false;
         }
       }
     }

     if (goon) {
        zeile = zeile.next('tr');
        goon=zeile.length>0;
     }
}    

Ok, prima di tutto, la linea 4 con il document.getElementById(hf...) sembra ammettere la sconfitta e probabilmente lo è - ma $("#"+hf).val() semplicemente non lo farebbero, è tornato indefinita: (

Come ho detto, questo codice funziona bene. Ma poi ho avuto un caso in cui due file contenevano lo stesso valore nel hfMat-campo, e il mio script sarebbe poi nascondere di nuovo la prima fila, mentre avrebbe dovuto continuare al secondo. "Easy", ho pensato, e migliorato la dichiarazione per determinare la riga successiva al trattamento (linea 4 dalla fine), così ho cambiato da zeile = zeile.next('tr'); a zeile = zeile.next('tr:visible'); Tuttavia, con jQuery 1.3.2, questo non funziona e ottengo indefinito. Che cosa sto facendo di sbagliato?

E sicuramente, ci deve essere un modo molto migliore per ottenere questa selezione fatta senza tale looping disordinato, semplicemente utilizzando alcuni dei meccanismi più avanzati di jQuery, ma ho paura questi sono al di là di me atm. Ma sarei felice di vedere alcune idee;)

È stato utile?

Soluzione

Quando si nasconde semplicemente un elemento, non viene tolto dal flusso di documenti. Pertanto, essa continuerà a farsi situato vicino le vostre domande DOM.

Senza vedere il codice HTML attuale, posso solo ipotizzare che ciò che si sta cercando di realizzare può essere fatto in modo più semplice con il seguente ciclo jQuery:

$("tr input[value=" + mid + "]").each(function () {
    this.hide();
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top