1

テーブルのすべての行をループするコードを記述し、各行の非表示の入力をチェックして、特定の値が含まれているかどうかを確認し、含まれている場合は値を設定して行を非表示にする必要があります。不器用かもしれませんが、うまくいきました: (変数「zeile」には最初の行が含まれ、ループの前に正しく初期化されます):

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;
     }
}    

わかりました、まず第一に、4行目はdocument.getElementById(hf...)敗北を認めているように見えますが、おそらくそうです-しかし、$("#"+hf).val()それをしないだけで、未定義が返されました:(

私が言ったように、このコードはうまくいきます。しかし、2 つの行が hfMat-field に同じ値を含む場合があり、スクリプトは最初の行を再び非表示にしましたが、2 番目の行に続くはずでした。「簡単だな」と思い、次に処理する行を決定する文(末尾から4行目)を改良したので、 から にzeile = zeile.next('tr');変更zeile = zeile.next('tr:visible'); 。私は何を間違っていますか?

確かに、jQuery のより高度なメカニズムのいくつかを使用するだけで、このような面倒なループを行わずにこの選択を行うためのはるかに優れた方法があるに違いありませんが、残念ながら、これらは私の能力を超えています。しかし、私はいくつかのアイデアを見てうれしいです;)

4

1 に答える 1

1

要素を非表示にするだけでは、ドキュメントフローから削除されません。したがって、DOMクエリによって引き続き検索されます。

実際のHTMLを見なくても、次のjQueryループを使用して、実行しようとしていることがより簡単な方法で実行できると推測できます。

$("tr input[value=" + mid + "]").each(function () {
    this.hide();
});
于 2009-11-06T18:10:33.110 に答える