2013-01-29 2 views
1

Я пытаюсь перебрать все ячейки в таблице и выполнить сравнение по значению.javascript: цикл через все ячейки в таблице

  var table = document.getElementById("assignedvlans"); 
      alert(table); 
      alert($('#assignedvlans tbody tr').length); 
      for (var i = 0, cell; cell = table.cells[i]; i++) { 
       //iterate through all cells in table. 
       alert('in the loop'); 
       alert(cell.val()); 
       if (cell.val == IdforVlanToAdd) 
       { 
        alert('This vlan is already associated with the port.'); 
        $bexit = true; 
        break; 
       }     
      } 

Когда я проверить этот код, предупреждение (таблица) код работает - он возвращает «объект HTMLTableElement» и предупреждение для таблицы длин возвращает 4, который также является правильным. Но предупреждения в цикле никогда не происходят. Можете ли вы сказать мне, где я ошибаюсь в управлении контуром? Спасибо.

+0

Вы получаете какие-либо ошибки в консоли? – War10ck

+0

table.cells не будет работать, потому что .cells являются частью .rows not table напрямую. –

+2

Также 'cell' не является объектом jQuery, поэтому он не будет иметь метод« val() »(он также не является« input »любого типа, поэтому вы, вероятно, захотите« text() »после создания jQuery объект), и я предполагаю, что 'cell.val' является опечаткой ..? И почему вы смешиваете подходы jQuery и plain-JavaScript? (Это работает, но это может усложнить ситуацию.) –

ответ

5

table содержит rows[], которые сами содержат cells[]. Вы не можете получить cells[] непосредственно с table.

Вы можете использовать table.getElementsByTagName('td') в качестве ярлыка, если нет вложенных таблиц.

В противном случае вы должны пройти через каждый из rows[], и в этом цикле вы можете пройти через cells[].

var table = document.getElementById('assignedvlans'), 
    rows = table.rows, rowcount = rows.length, r, 
    cells, cellcount, c, cell; 
for(r=0; r<rowcount; r++) { 
    cells = rows[r].cells; 
    cellcount = cells.length; 
    for(c=0; c<cellcount; c++) { 
     cell = cells[c]; 
     // now do something. 
    } 
} 
+0

Я пробовал свой код, но когда я делаю предупреждение (cell.text); все возвращается как неопределенное. – dot

+1

Это потому, что 'cell.text' не определено. Если вы хотите текстовое содержимое, попробуйте 'cell.firstChild.nodeValue' (если текст там единственный) или' text = (cell.textContent || cell.innerText) ', если там тоже есть HTML. –

0

Причины вы не получаете любых оповещения внутри цикла вашей петля for не структурирована правильно. Он немедленно завершает работу, потому что назначение cell = table.cells[i] возвращает false.

+0

Нет, это немедленно прекращается, потому что 'table.cells [i]' возвращает неопределенный (что является ложным). Если бы это было так, это был бы бесконечный цикл. –

+0

Да, спасибо за улов. –

+0

Для тех, кто приходит сюда через google, требуется * простая и малая * прокладка для 'table.cells' (для исправления старого/IE-ориентированного кода), см. [Мой ответ] (http://stackoverflow.com/a/23730355/588079) [В: Браузер Firefox не распознает table.cells?] (Http://stackoverflow.com/q/10701076/588079) – GitaarLAB

1

Попробуйте так:

 var $table = $('#assignedvlans tbody td'); 
     $.map($table,function(){ 
      if ($(this).text() == IdforVlanToAdd) 
      { 
       alert('This vlan is already associated with the port.'); 
       return; 
      } 
     }); 
+0

А что, если в таблице есть таблица? –

+2

Это не так в этом вопросе. – sdespont

+0

Откуда вы знаете? Показывается HTML. –

0
var myDataArr = []; 
$('#dynamic_cards tr').each(function(){ 
    $(this).find('td').each(function(){ 
     myDataArr.push($(this).text()); 
    }); 
}); 
console.log(myDataArr); 
Смежные вопросы