动态将项目添加到列表

时间:2020-10-02 11:55:49

标签: javascript function add crud

我编写用于任务管理的CRUD应用程序。我正在创建带有任务列表的表单。没有主任务和子任务,例如

Main quest 1
    Sub-task 1
    Sub-task 2
Main quest 2
   Sub-task 1
Main quest 3
e.t.c...

我编写了一个脚本,使您可以创建具有任意数量的主要任务和附带任务的表单

const ol = document.querySelector('ol');

function addMainQuest() {
  let newMain = document.createElement('li');
  newMain.innerHTML = '<input name="mainQuest" id="mainQuest" placeholder="Podaj główny cel zadania" class="questListInput mainQuest"><button type="button" onclick="addSecQuest()">Dodaj zad. podrzędne</button>';
  ol.append(newMain);
}
    
function addSecQuest() {
  let liLast = document.createElement('li');
  liLast.innerHTML = '<input name="secQuest" id="secQuest" placeholder="Podaj podrzędny cel zadania" class="questListInput secondaryQuest">';
  ol.append(liLast);
}
<ol id="ol" class="inputList">
  <li id="li">
    <input type="text" name="mainQuest1" id="mainQuest" placeholder="Podaj główny cel zadania" class="questListInput mainQuest">
    <button onclick="addSecQuest()" type="button">Add sec-quest</button>
  </li>
                        
</ol>
<button id="addMain" type="button" onclick="addMainQuest()">Add main quest</button>
    

...但是我有问题。当我创建了多个主任务(例如2个)并且想要将一个子任务添加到1个主任务中时,该子任务将被添加到列表的末尾,在最后一个主任务下。

如何解决?

2 个答案:

答案 0 :(得分:2)

为另一个<ul>标签添加逻辑和标记,以便您可以使用嵌套列表

<ul>
<li>Coffee</li>
<li>Tea
    <ul>
    <li>Black tea</li>
    <li>Green tea</li>
    </ul>
</li>
<li>Milk</li>
</ul>

https://www.w3schools.com/html/tryit.asp?filename=tryhtml_lists_nested

答案 1 :(得分:1)

您应该创建内部UL并放置LI元素。试试这个

<html>
    <body>
        <ol id="ol" class="inputList">
            <li id="li">
                <input type="text" name="mainQuest1" id="mainQuest" placeholder="Podaj główny cel zadania" class="questListInput mainQuest">
                <button onclick="addSecQuest(event)" type="button">Add sec-quest</button>
            </li>
                            
        </ol>
        <button id="addMain" type="button" onclick="addMainQuest()">Add main quest</button>

        <script>
            function addMainQuest() {
                let newMain = document.createElement('li');
                newMain.innerHTML = '<input name="mainQuest" id="mainQuest" placeholder="Podaj główny cel zadania" class="questListInput mainQuest"><button type="button" onclick="addSecQuest(event)">Dodaj zad. podrzędne</button>'
                ol.append(newMain);
            }

            function addSecQuest(e) {
                const currentLi = e.target.parentNode;
                let innerUl;
                if (currentLi.children.length < 3) { // only input and button
                    innerUl = document.createElement('ul');
                    currentLi.append(innerUl);
                } else { // input, button and ul
                    innerUl = currentLi.children[2];
                }

                let liLast = document.createElement('li');
                liLast.innerHTML = '<input name="secQuest" id="secQuest" placeholder="Podaj podrzędny cel zadania" class="questListInput secondaryQuest">';
                innerUl.append(liLast);
            }

            addMainQuest();

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