2009-11-06 7 views
1

Мне нужно написать код, который будет зацикливаться на всех строках таблицы, а затем проверить скрытый ввод в каждой строке, чтобы увидеть, содержит ли оно определенное значение, и если да, установите некоторые значения и скрыть строку. Это может быть неуклюжим, но он работал: (переменный «Zeile» содержит первый ряд, правильно инициализирован перед циклом):jQuery: просматривание всех видимых строк таблицы

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() просто не сделал бы этого, вернулся undefined :(

Как я уже говорил, этот код работает нормально. НО тогда у меня был случай, когда две строки содержали одно и то же значение в поле hfMat , и мой скрипт снова скроет первую строку, тогда как она должна продолжаться до второй. «Легко», подумал я, и улучшил утверждение, чтобы определить следующую строку, чтобы выполнить ss (4-я строка с конца), поэтому я изменился с zeile = zeile.next('tr'); на zeile = zeile.next('tr:visible'); Однако, с jQuery 1.3.2 это не работает, и я получаю неопределенный. Что я делаю не так?

И, конечно же, должен быть намного лучший способ сделать этот выбор без такого беспорядочного цикла, просто используя некоторые из более продвинутых механизмов jQuery, но я боюсь, что они превышают меня. Но я был бы рад увидеть некоторые идеи;)

+1

Было бы полезно, если вы можете включить образец вашего HTML. –

ответ

1

Когда вы просто скрываете элемент, он не выводится из потока документов. Поэтому он будет по-прежнему размещаться по вашим запросам DOM.

Не видя ваш фактический HTML, я могу только предположить, что то, что вы пытаетесь сделать, можно сделать более простым способом с помощью следующей петли JQuery:

$("tr input[value=" + mid + "]").each(function() { 
    this.hide(); 
}); 
+0

Благодарим вас, что этот пример делает убедительный аргумент в пользу механизмов обработки jQuery. Тем не менее, ваше замечание о скрытии и элементе, все еще находящемся, не тотально поразило гвоздь на голове, это было и понятно, но вопрос в том, почему тогда zeile = zeile.next ('tr: visible'); не соответствует следующей видимой строке. И жаль, что не предоставил здесь образец, текущий код содержит тонны элементов управления, не имеющих отношения к этой проблеме. Я постараюсь сделать сдержанную версию этого образца ... – MBaas

Смежные вопросы