Javascript.RU

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

Корректно не работает кнопка удаления строки таблицы
Здравствуйте. Нужна помощь с настройкой кнопок. Задача следующая:"Расположить в окне браузера в вертикальный ряд список товаров, включающих пиктограмму и название. Создать кнопки «вверх» и «вниз», позволяющими переместить выбранный элемент на 1 позицию выше или ниже в списке, а также кнопку «удалить», при нажатии на которую элемент удаляется из списка". Вот, что у меня получилось:

<!DOCTYPE html>
<html>
    <head>

        <style>
            tr:hover{background-color:#EEE;cursor: pointer}
        </style>
    </head>
    <body>
        <table id="table" border="1">
            <tr>
                <th>Изображение</th>
                <th>Название</th>
            </tr>
            <tr>
                <td><img src="C:\URL\book.png"></td>
                <td>Книга</td>
                
            </tr>
            <tr>
                <td><img src="C:\URL\clock.png"></td>
                <td>Часы</td>
                
            </tr>
            <tr>
                <td><img src="C:\URL\key.png"></td>
                <td>Ключ</td>
                
            </tr>
            
        </table>
        <button onclick="upNdown('up');">&ShortUpArrow;</button>
        <button onclick="upNdown('down');">&ShortDownArrow;</button>
		<button onclick="removeSelectedRow();">Удалить</button>
        
        <script>
            
            var index = 1;  
            function getSelectedRow()
            {
                var table = document.getElementById("table");
                for(var i = 1; i < table.rows.length; i++)
                {
                    table.rows[i].onclick = function()
                    {
                        
                        if(typeof index !== "undefined"){
                            table.rows[index].classList.toggle("selected");
                        }
                       
                        index = this.rowIndex;
                        this.classList.toggle("selected");

                    };
                }
                    
            }
  

            getSelectedRow();
            
            
            function upNdown(direction)
            {
                var rows = document.getElementById("table").rows,
                    parent = rows[index].parentNode;
                 if(direction === "up")
                 {
                     if(index > 1){
                        parent.insertBefore(rows[index],rows[index - 1]);

                        index--;
                    }
                 }
                 
                 if(direction === "down")
                 {
                     if(index < rows.length -1){
                        parent.insertBefore(rows[index + 1],rows[index]);

                        index++;
                    }
                 }
            }
			
			
				
			
            function selectedRowToInput()
        
            {  
                for(var index = 1; 
				index < table.rows.length; i++)
                {
                    table.rows[index].onclick = function()
					
                    {

                      rIndex = this.rowIndex;


                    };
                }
            }

            selectedRowToInput();
            
            
            function removeSelectedRow()
            {
                table.deleteRow(rIndex);

            }

			
        </script>
        
    </body>
</html>


В результате выходит, что одна часть кода мешает работе другой. Если в функции selectedRowToInput в место index поставить i, то будет корректно работать только эта функция(удаление), если всё оставить так, то будут работать корректно только кнопки «вверх» и «вниз». А также хотелось бы чтоб «удаление» было под функцией upNdown, вместе с «вверх» и «вниз», а не отдельно в selectedRowToInput.
Каким образом надо исправить код, чтобы всё это осуществить?
Ответить с цитированием
  #2 (permalink)  
Старый 05.02.2019, 18:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Faith,
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <style>
            tr:hover, tr.sel:hover{background-color:#EEE;cursor: pointer}
            tr.sel {background-color:#40E0D0;cursor: pointer}
        </style>
    </head>
    <body>
        <table id="table" border="1">
            <thead>
            <tr>
                <th>Изображение</th>
                <th>Название</th>
            </tr>
            </thead>
            <tbody>
            <tr>
                <td><img src="C:\URL\book.png"></td>
                <td>Книга</td>

            </tr>
            <tr>
                <td><img src="C:\URL\clock.png"></td>
                <td>Часы</td>

            </tr>
            <tr>
                <td><img src="C:\URL\key.png"></td>
                <td>Ключ</td>

            </tr>
         </tbody>
        </table>
        <button type="button" onclick="upNdown('up');">&ShortUpArrow;</button>
        <button type="button" onclick="upNdown('down');">&ShortDownArrow;</button>
        <button type="button" onclick="removeSelectedRow();">Удалить</button>

        <script>
var tbody = document.getElementById("table").tBodies[0], tr;

tbody.addEventListener('click', function(event) {
    var temp = event.target.closest("tr");
    if (tr) tr.classList.remove("sel");
    if (tr != temp) {
        tr = temp;
        tr.classList.add("sel")
    } else {
        tr = null;
    }

});



function upNdown(direction) {
    if (!tr) return;
    direction = direction == 'up' ? -1 : 1;
    var rows = [...tbody.rows];
    var len = rows.length;
    var i = tr.rowIndex - 1;
    var index = (i + direction + len) % len;
    var temp = rows[index];
    rows[index] = tr;
    rows[i] = temp;
    tbody.append(...rows);

}



function removeSelectedRow() {
    tr && (tr.remove(), tr = null);

}
        </script>

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Корректное удаление строки из таблицы Alex57B Элементы интерфейса 4 16.09.2018 23:48
кнопка на удаление строки Ninok Общие вопросы Javascript 4 06.12.2017 17:07
Как удалить именно тот див, в котором находиться сама кнопка удаления? Wahtel Элементы интерфейса 1 21.11.2014 13:39
Не работает кнопка "Наверх" dle 9.3 dunek_ Opera, Safari и др. 1 25.05.2013 18:26
получить данные из строки таблицы prizrak39 Events/DOM/Window 4 26.03.2013 08:45