2015-08-20 3 views
0

У меня есть общедоступная база данных, которую я хочу переформатировать, используя jQuery, JavaScript (и позже HTML и CSS). Я пытаюсь создать новые группы в таблице, используя предоставленную информацию. В этом конкретном примере я хочу найти каждый экземпляр месяца августа в таблице.Поиск строк по массиву ничего не возвращает

Я пробовал два метода для поиска содержимого, и оба возвращают пустой массив ('[]'). Это запутанно, потому что я могу регистрировать содержимое в консоли, но оно не будет добавлено в новый массив.

//DETECT ROWS, COLUMNS 
var tableArray = []; 

$("table#tableTest tr").each(function() { 
    var arrayOfThisRow = []; 
    var tableData = $(this).find('td'); 
    if (tableData.length > 0) { 
     tableData.each(function() { arrayOfThisRow.push($(this).text()); }); 
     tableArray.push(arrayOfThisRow); 
    } 
}); 

//SAMPLE LOGS 
console.log("R1, C5: " + tableArray[4][3]); 
console.log("Total row hits: " + tableArray.length); 

//CHECK FOR MONTH (AUGUST) 

//Using for 
function month() { 
    //indices represents matches within var text and will be different for each row. 
    var indices = []; 
    //This executes for every row, 0 column. 
    for (var i = 0; i < tableArray.length; i++) { 
     //text represents the text contents of current position. 
     var text = tableArray[i][0]; 
    //h represents each letter of text. 
     for(var h = 0; h < text.length; h++) { 
      if (text[h] === "A") { 
       // If we find it, add characters up to 
       // the length of month to the array 
       for(var j = h; j < (month.length + h); j++) { 
        indices.push(text[j]); 
       }; 
      }; 
     }; 

     //Log every month (works) 
     //console.log(tableArray[i][0]); 
    }; 
    return indices; 
}; 

month("August"); 

//Alternative method 
var indices = []; 
var element = "August"; 
var idx = tableArray.indexOf(element); 
while (idx != -1) { 
    indices.push(idx); 
    idx = tableArray.indexOf(element, idx + 1); 
} 
console.log(indices); 
+0

Почему вы пропускание аргумента 'месяца()'? Он не принимает никаких параметров. – Barmar

ответ

1

Вы не используете аргумент функции month() в любом месте.

function month(monthname) { 
    var indices = []; 
    $.each(tableArray(function(rowNum, row) { 
     $.each(row, function(colNum, col) { 
      if (col.indexOf(monthname) != -1) { 
       indices.push(col); 
      } 
     }); 
    }); 
    return indices; 
} 
0

Использование JQuery вы можете также просто сделать это:

function month (elem, needle) { 
 
    elem.find("td:contains('"+needle+"')").each(function() { 
 
     console.log(this); 
 
    }) 
 
} 
 

 
month($('table'), "AUGUST");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
     <td>AUGUST</td> 
 
    </tr> 
 
    <tr> 
 
     <td>MAY</td> 
 
    </tr> 
 
    <tr> 
 
     <td>APRIL</td> 
 
    </tr> 
 
    <tr> 
 
     <td>JUNE</td> 
 
    </tr> 
 
    <tr> 
 
     <td>AUGUST</td> 
 
    </tr> 
 
    <tr> 
 
     <td>SEPTEMBER</td> 
 
    </tr> 
 
    <tr> 
 
     <td>AUGUST</td> 
 
    </tr> 
 
    <tr> 
 
     <td>JUNE</td> 
 
    </tr> 
 
    <tr> 
 
     <td>AUGUST</td> 
 
    </tr> 
 
    <tr> 
 
     <td>MAY</td> 
 
    </tr> 
 
</table>

+0

Благодарю вас, попробовав это ненадолго, похоже, что он работает очень хорошо. Я никогда не использовал jQuery, но, похоже, это лучший способ выполнить эту работу. Я попытаюсь принять это и создать новый идентификатор элемента из результатов в ближайшее время. –

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