Для l oop внутри для l oop не работает должным образом, повторяя одни и те же значения несколько раз Javascript - PullRequest
2 голосов
/ 13 апреля 2020

Я хочу, чтобы каждый тег <tbody> исчезал как индекс объекта, как сначала <tbody> -> 1 и второй <tbody> -> 2, затем внутри <tbody> каждый <tr> будет другим объектом, и это будет сохранен в объекте <tbody> и последняя последняя часть каждой <td> должна иметь ключ объекта ("eiin", "name") внутри <tr> объекта

, который я пытаюсь использовать для l oop несколько раз, но console.log показывает, что все в порядке, но первый объект повторяется 2 раза.

Html

<section class="institute_list">
    <table class="table" border="1">
        <thead>
            <tr>
                <th scope="col">EIIN</th>
                <th scope="col">Institute</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>000000</td>
                <td>Name</td>
            </tr>
        </tbody>
        <tbody>
            <tr>
                <td>111111</td>
                <td>Name 2</td>
            </tr>
        </tbody>
    </table>
</section>

Javascript & jQuery

<script>
    var rows = '', the_row='', the_xrow={}, tr_values={}, xtd_obj={};
    tbodys = ($(".institute_list .table tbody").length);

    for( var x=0; tbodys > x; x++)  {
        rows = $('.institute_list .table tbody:nth-child('+(x+1)+') tr').length;
        the_row = '.institute_list .table tbody:nth-child('+(x+1)+') tr:nth-child(';

        for( var i=1; rows >= i; i++ ){
            tr_values = {
                'eiin'   : $(the_row+i+') td:first-child').text(),
                'name'   : $(the_row+i+') td:nth-child(2)').text()
            };

            the_xrow[i] = tr_values;
        }  
        xtd_obj[x] = the_xrow;
    }
    console.log(xtd_obj);
</script>

и я получаю этот вывод в консоли здесь

Ответы [ 3 ]

1 голос
/ 14 апреля 2020

Вы можете попробовать код ниже. Вы можете разделить каждый тег <tbody>, <tr>, <td> как al oop, а затем сделать их массивом.

var target = $(".institute_list > table");

var output = [];
$(target).find("tbody").each(function(i){
    output[i] = {};
    $(this).children().each(function(j){
        output[i][j] = {};
         $(this).children().each(function(k, td){
         	if ( k == 0 ) {
         		output[i][j]["eiin"] = $(td).text();
         	} else if ( k == 1 ) {
         		output[i][j]["name"] = $(td).text();
         	} else {
         		output[i][j][k] = $(td).text();
         	}
        });
    });
});
console.log(output);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<section class="institute_list">
    <table class="table" border="1">
        <thead>
            <tr>
                <th scope="col">EIIN</th>
                <th scope="col">Institute</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>000000</td>
                <td>Name</td>
            </tr>
        </tbody>
        <tbody>
            <tr>
                <td>111111</td>
                <td>Name 2</td>
            </tr>
        </tbody>
    </table>
</section>
1 голос
/ 13 апреля 2020

Во-первых, вам нужен закрывающий тег </tbody> вокруг первого элемента. Во-вторых, я думаю, что вы можете столкнуться с проблемой ограничения. Вы определяете the_xrow и tr_values вне циклов for, а не внутри циклов for.

<script>
    var xtd_obj={};
    var tbodys = ($(".institute_list .table tbody").length);

    for( var x=1; tbodys >= x; x++)  {
        var current_row = '.institute_list .table tbody:nth-child('+x+') tr';
        var rows = $(current_row).length;
        var the_row = current_row + ':nth-child(';
        var the_xrow = {};
        for( var i=1; rows >= i; i++ ){
            the_xrow[i] = {
                'eiin'   : $(the_row+i+') td:first-child').text(),
                'name'   : $(the_row+i+') td:nth-child(2)').text()
            };
        }  
        xtd_obj[x] = the_xrow;
    }
    console.log(xtd_obj);
</script>
0 голосов
/ 13 апреля 2020

у меня работает

<script>
    var rows = '', the_row='', xtd_obj={};
    var tbodys = ($(".institute_list .table tbody").length)+1;

    for( var x=1; tbodys > x; x++)  {
        rows = $('.institute_list .table tbody:nth-child('+(x+1)+') tr').length;
        the_row = '.institute_list .table tbody:nth-child('+(x+1)+') tr:nth-child(';
        var the_xrow = {};
        for( var i=0; rows > i; i++ ){
            var tr_values = {
                'eiin'   : $(the_row+i+1+') td:first-child').text(),
                'name'   : $(the_row+i+1+') td:nth-child(2)').text()
            };

            the_xrow[i] = tr_values;
        }  
        xtd_obj[x] = the_xrow;
    }
    console.log(xtd_obj);
</script>

Вот скриншот

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...