Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Создание строк и столбцов JS при клике (https://javascript.ru/forum/dom-window/77517-sozdanie-strok-i-stolbcov-js-pri-klike.html)

Nikandro 15.05.2019 22:01

Создание строк и столбцов JS при клике
 
В джсе новичек.

есть таблица с N количеством строк и есть соответственно столбцы.
Нужно , что бы при каждом клике добавлялся один столбец с нужным количеством строк.

У меня получается создать только 1 блок
https://codepen.io/Nikapalitis/pen/zQZqyo

рони 15.05.2019 22:33

Nikandro,
http://javascript.ru/forum/showthrea...482#post413482

рони 15.05.2019 22:37

Цитата:

Сообщение от Nikandro
Нужно , что бы при каждом клике добавлялся один столбец с нужным количеством строк.

цикл по всем строкам appendChild

рони 15.05.2019 22:50

Nikandro,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CodePen - A Pen by  Niksan</title>
<style>
            *{
        padding: 0;
        margin: 0;
        box-sizing: border-box;
}

.main{
        background: rgb(224, 224, 224);
        width: 100%;
        display: flex;
}

.sidebar{
        width: 15%;
        height: 900px;
        background-color: rgb(180, 180, 180);
}

.h1{
        font-size: 1.5em;
        padding: 5px;
        padding-left: 15px;
}

.info{
        background: rgb(255, 223, 211);
        padding: 5px;
        padding-left: 15px;
}

.table-knopki{
        width: 100%;
        height: 50px;
        background: aliceblue;
        display: flex;
}
.tab-text{
        font-size: 2em;
        font-weight: bold;
        padding: 5px;
        margin-left: 20px;
        padding-right: 200px;
}

.tab{
        width: 100%;
        margin-top: 60px;
        margin-left: 30px;
}

button{
        padding: 5px;
        border: 0;
        color: azure;
        font-weight: bold;
        margin: 5px;
}


th,td{
        border: 1px solid black;
        text-align: center;
        width: 30px;
        height: 30px;
        padding: 15px;
}

.first-n{
        width: 200px;
        height: 30px;
        border: 1px solid black;
        background: rgb(168, 167, 167);
}

.knopka {
    background: orangered;
}

        </style>

</head>
<body translate="no">
<div class="tab">
<div class="table-knopki">
<p class="tab-text"> Table</p>
<button class="knopka green" onclick="add()">Add day</button>
<button class="knopka red" onclick="remove()">Remove Day</button>
<button class="knopka blue">Update Table</button>
</div>
<table>
<tr id="myTD">
<td class="first-n"></td>
<td>Average</td>
</tr>
<tr>
<td>Student 1</td>
<td>3.0</td>
</tr>
<tr>
<td>Student 2</td>
<td>3.0</td>
</tr>
<tr>
<td>Student 3</td>
<td>3.0</td>
</tr>
</table>
</div>
<script>
function add() {
    var para = document.createElement("TD");
    [...document.querySelectorAll("tr")].forEach(tr => tr.append(para.cloneNode()))
};

function remove() {
    [...document.querySelectorAll("tr td:last-child")].forEach(td => td.remove());
}
        </script>
</body>
</html>

Nikandro 16.05.2019 17:56

Большое спасибо
Цитата:

Сообщение от рони (Сообщение 507812)
Nikandro,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CodePen - A Pen by  Niksan</title>
<style>
            *{
        padding: 0;
        margin: 0;
        box-sizing: border-box;
}

.main{
        background: rgb(224, 224, 224);
        width: 100%;
        display: flex;
}

.sidebar{
        width: 15%;
        height: 900px;
        background-color: rgb(180, 180, 180);
}

.h1{
        font-size: 1.5em;
        padding: 5px;
        padding-left: 15px;
}

.info{
        background: rgb(255, 223, 211);
        padding: 5px;
        padding-left: 15px;
}

.table-knopki{
        width: 100%;
        height: 50px;
        background: aliceblue;
        display: flex;
}
.tab-text{
        font-size: 2em;
        font-weight: bold;
        padding: 5px;
        margin-left: 20px;
        padding-right: 200px;
}

.tab{
        width: 100%;
        margin-top: 60px;
        margin-left: 30px;
}

button{
        padding: 5px;
        border: 0;
        color: azure;
        font-weight: bold;
        margin: 5px;
}


th,td{
        border: 1px solid black;
        text-align: center;
        width: 30px;
        height: 30px;
        padding: 15px;
}

.first-n{
        width: 200px;
        height: 30px;
        border: 1px solid black;
        background: rgb(168, 167, 167);
}

.knopka {
    background: orangered;
}

        </style>

</head>
<body translate="no">
<div class="tab">
<div class="table-knopki">
<p class="tab-text"> Table</p>
<button class="knopka green" onclick="add()">Add day</button>
<button class="knopka red" onclick="remove()">Remove Day</button>
<button class="knopka blue">Update Table</button>
</div>
<table>
<tr id="myTD">
<td class="first-n"></td>
<td>Average</td>
</tr>
<tr>
<td>Student 1</td>
<td>3.0</td>
</tr>
<tr>
<td>Student 2</td>
<td>3.0</td>
</tr>
<tr>
<td>Student 3</td>
<td>3.0</td>
</tr>
</table>
</div>
<script>
function add() {
    var para = document.createElement("TD");
    [...document.querySelectorAll("tr")].forEach(tr => tr.append(para.cloneNode()))
};

function remove() {
    [...document.querySelectorAll("tr td:last-child")].forEach(td => td.remove());
}
        </script>
</body>
</html>


Nikandro 16.05.2019 20:08

рони
В вашей статье , что вы кинули там аджакс и у меня глаза разбегаются (не понимаю)
Сейчас я добавил в ячейки input, но как сделать так , что бы при клике добавлялись и ячейки ввода input тоже , а не пустые td / tr.

пытался сделать по вашему методу , но так не работает
Код:

function add() {
    var para = document.createElement("TD");
    [...document.querySelectorAll("tr")].forEach(tr => tr.append(para.cloneNode()))
    var a = document.createElement("INPUT");
    [...document.querySelectorAll("input")].forEach(input => input.append(a.cloneNode))
};


рони 16.05.2019 20:15

Nikandro,
function add() {
    var para = document.createElement("TD");
    var a = document.createElement("INPUT");
    para.append(a);
    [...document.querySelectorAll("tr")].forEach(tr => tr.append(para.cloneNode(true)))
};


Часовой пояс GMT +3, время: 17:25.