Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.01.2019, 18:12
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Добавить кнопку удалить для ячеек таблицы
Есть простенький ToDo лист. Задания хранятся в localStorage. Хочу напротив каждого задания добавить кнопку Удалить, которая бы удаляла конкретное задание из массива, в котором хранятся задания вытащены из localStorage, и в самом localStorage. Но как продумать логику, чтобы конкретное задание удалялось?!
1) Cами кнопки я добавил:
var tdDelete = document.createElement('td');
    tdDelete.innerHTML = '<button>Удалить</button>';
    table.appendChild(tdDelete); //"Навигация"

2) Дальше нужно выбрать из DOM кнопки
3) ???
4) Профит
Код HTML:
<body>
    <p>Введите заголовок: <input type="text" id="setName"></p>
    <p>Введите описание: <input  type="text"  id="setText"></p>
    <button id="setValue">Добавить</button>
    <hr>
    <h3>Список идей:</h3>
<table>
  <thead>
    <tr>
        <th>Название</th>
        <th>Описание</th>
        <th>Навигация</th>
    </tr>
  </thead>
  <tbody id="tableBody">

  </tbody>
</table>
<br>
<button id="del">Очистить</button>
</body>

Код JS:
var localStorageArray = [];
// получаем из localStorage данные
if(localStorage.getItem('todo')!=undefined){
    localStorageArray = JSON.parse(localStorage.getItem('todo'));
    echo();
}
console.log(localStorageArray);
// получаем данные из формы
document.getElementById('setValue').onclick = function(){
    var temp = {};
    var text = document.getElementById('setText').value;
    var name = document.getElementById('setName').value;
    if(text != '' && name != '') {
        temp.name = name;
        temp.text = text;
        // temp.check = 'false';
        var i = localStorageArray.length;
        localStorageArray[i] = temp;
        echo();
        localStorage.setItem('todo', JSON.stringify(localStorageArray));
    } else {
        alert('Заполните все поля');
    }
}
// выводим данные из массива, создавая ячейки в таблице
function echo() {
    document.getElementById('tableBody').innerHTML = ""; // очищаем контейнер
    var table = document.getElementById('tableBody');
    // выводим данные из массива
    for (const key in localStorageArray){
    var tr = document.createElement('tr'); //создаем еще строку
    table.appendChild(tr);
    var tdLeft = document.createElement('td'); // создаем столбец
    tdLeft.innerHTML = localStorageArray[key].name;
    var tdRight = document.createElement('td'); // создаем столбец
    tdRight.innerHTML = localStorageArray[key].text;
    // кнопка удалить
    var tdDelete = document.createElement('td');
    tdDelete.innerHTML = '<button>Удалить</button>';
    // добавляем элементы на страницу
    table.appendChild(tdLeft);  // "Название"
    table.appendChild(tdRight); //"Описание"
    table.appendChild(tdDelete); //"Навигация"

    }
}
document.getElementById('del').onclick = function(){
    localStorageArray = [];
    localStorage.clear();
    location.reload();
}
Ответить с цитированием
  #2 (permalink)  
Старый 26.01.2019, 20:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

CryNet,
на всякий случай ...
https://javascript.ru/forum/dom-wind...tml#post500746
Ответить с цитированием
  #3 (permalink)  
Старый 27.01.2019, 00:44
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Не уверен, что правильно понял
Ответить с цитированием
  #4 (permalink)  
Старый 27.01.2019, 09:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

CryNet,
пример того, что вы хотите сделать, там нет удаления, но при желании можно добавить, плюс есть сортировка.
Ответить с цитированием
  #5 (permalink)  
Старый 30.01.2019, 20:26
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Сообщение от рони Посмотреть сообщение
рони,
там нет удаления
Тут у меня проблема. Код для удаления конкретной записи в таблице:
[].forEach.call(document.querySelectorAll('button#idTable'), function(el){
    el.addEventListener('click', function () {
        var tr= this.parentNode.parentNode;
        tableBody.deleteRow(tr.rowIndex);
    })
});

Но в итоге сверху вниз, вне зависимости от того на какую кнопку кликнули, удаляется тег tr, хотя вложенные в него теги td остаются.
Ответить с цитированием
  #6 (permalink)  
Старый 30.01.2019, 20:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от CryNet
'button#idTable'
id уникально!!!
и лучше макет целиком
Ответить с цитированием
  #7 (permalink)  
Старый 30.01.2019, 21:06
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Сообщение от рони Посмотреть сообщение
id уникально!!!
Та это уже просто война правок в коде...

var localStorageArray = [];
var tr, tdLeft, tdRight, tdDelete;
// получаем из localStorage данные
if(localStorage.getItem('todo')!=undefined){
    localStorageArray = JSON.parse(localStorage.getItem('todo'));
    echo();
}
// получаем данные из формы
document.getElementById('setValue').onclick = function(){
    var temp = {};
    var text = document.getElementById('setText').value;
    var name = document.getElementById('setName').value;
    if(text != '' && name != '') {
        temp.name = name;
        temp.text = text;
        // temp.check = 'false';
        var i = localStorageArray.length;
        localStorageArray[i] = temp;
        echo();
        localStorage.setItem('todo', JSON.stringify(localStorageArray));
    } else {
        alert('Заполните все поля');
    }
}
// выводим данные из массива, создавая ячейки в таблице
function echo() {
    document.getElementById('tableBody').innerHTML = ""; // очищаем контейнер
    var table = document.getElementById('tableBody');
    // выводим данные из массива
    for (const key in localStorageArray){
        tr = document.createElement('tr'); //создаем еще строку
        table.appendChild(tr);
        tdLeft = document.createElement('td'); // создаем столбец
        tdLeft.innerHTML = localStorageArray[key].name;
        tdRight = document.createElement('td'); // создаем столбец
        tdRight.innerHTML = localStorageArray[key].text;
        // копка удалить
        tdDelete = document.createElement('td');
        tdDelete.innerHTML = `<button class="idTable">Удалить</button>`;
        // добавляем элементы на страницу
        table.appendChild(tdLeft);  // "Название"
        table.appendChild(tdRight); //"Описание"
        table.appendChild(tdDelete); //"Навигация"
    }
}

[].forEach.call(document.querySelectorAll('button.idTable'), function(el){
    el.addEventListener('click', function () {
        var tr= this.parentNode.parentNode;
        tableBody.deleteRow(tr.rowIndex);
    })
});

document.getElementById('del').onclick = function(){
    localStorageArray = [];
    localStorage.clear();
    location.reload();
}


<body>
    <p>Введите заголовок: <input type="text" id="setName"></p>
    <p>Введите описание: <input  type="text"  id="setText"></p>
    <button id="setValue">Добавить</button>
    <hr>
    <h3>Список идей:</h3>
<table id="tbl">
  <thead>
    <tr>
        <th>Название</th>
        <th>Описание</th>
        <th>Навигация</th>
    </tr>
  </thead>
  <tbody id="tableBody">

  </tbody>
</table>
<br>
<button id="del">Очистить</button>
</body>
Ответить с цитированием
  #8 (permalink)  
Старый 30.01.2019, 21:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

CryNet,
макет, это то, что ниже ...
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
</head>

<body>
    <p>Введите заголовок: <input type="text" id="setName"></p>
    <p>Введите описание: <input  type="text"  id="setText"></p>
    <button id="setValue">Добавить</button>
    <hr>
    <h3>Список идей:</h3>
<table id="tbl">
  <thead>
    <tr>
        <th>Название</th>
        <th>Описание</th>
        <th>Навигация</th>
    </tr>
  </thead>
  <tbody id="tableBody">

  </tbody>
</table>
<br>
<button id="del">Очистить</button>
<script>
   var localStorageArray = [];
var tr, tdLeft, tdRight, tdDelete;
// получаем из localStorage данные
if(localStorage.getItem('todo')!=undefined){
    localStorageArray = JSON.parse(localStorage.getItem('todo'));
    echo();
}
// получаем данные из формы
document.getElementById('setValue').onclick = function(){
    var temp = {};
    var text = document.getElementById('setText').value;
    var name = document.getElementById('setName').value;
    if(text != '' && name != '') {
        temp.name = name;
        temp.text = text;
        // temp.check = 'false';
        var i = localStorageArray.length;
        localStorageArray[i] = temp;
        echo();
        localStorage.setItem('todo', JSON.stringify(localStorageArray));
    } else {
        alert('Заполните все поля');
    }
}
// выводим данные из массива, создавая ячейки в таблице
function echo() {
    document.getElementById('tableBody').innerHTML = ""; // очищаем контейнер
    var table = document.getElementById('tableBody');
    // выводим данные из массива
    for (const key in localStorageArray){
        tr = document.createElement('tr'); //создаем еще строку
        table.appendChild(tr);
        tdLeft = document.createElement('td'); // создаем столбец
        tdLeft.innerHTML = localStorageArray[key].name;
        tdRight = document.createElement('td'); // создаем столбец
        tdRight.innerHTML = localStorageArray[key].text;
        // копка удалить
        tdDelete = document.createElement('td');
        tdDelete.innerHTML = `<button class="idTable">Удалить</button>`;
        // добавляем элементы на страницу
        tr.appendChild(tdLeft);  // "Название"
        tr.appendChild(tdRight); //"Описание"
        tr.appendChild(tdDelete); //"Навигация"
    }


[].forEach.call(document.querySelectorAll('button.idTable'), function(el){
    el.addEventListener('click', function () {
        var tr= this.parentNode.parentNode;
        var index = tr.rowIndex - 1
        tableBody.deleteRow(index);
        localStorageArray.splice(index, 1);
        localStorage.setItem('todo', JSON.stringify(localStorageArray));
    })
});
}
document.getElementById('del').onclick = function(){
    localStorageArray = [];
    localStorage.clear();
    location.reload();
}

</script>


</body>

</html>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить кнопку вернуться назад jQuery ColorBox rkocoan Элементы интерфейса 3 28.06.2018 17:58
Как добавить кнопку изменить к элементу LLEEVV2020 Angular.js 3 10.03.2017 12:48
Не выводится содержимое ячеек таблицы SER Events/DOM/Window 2 23.06.2011 17:48
Реализация функции JavaScript, меняющей содержимое ячеек таблицы по событию onchange BOJIKOJIAK Events/DOM/Window 1 24.05.2010 05:50
onmouseover отрабатывает по разному для одинаковых ячеек таблицы ilshat Events/DOM/Window 2 11.02.2009 12:25