动态添加项目到列表
Dynamically adding items to the list
我为任务管理编写 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>
...但我有一个问题。当我创建了超过 1 个主任务(例如 2 个)并且我想向 1 个主任务添加子任务时,它会添加到列表的最后,在最后一个主任务下面。
如何解决?
为另一个 <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
您应该创建内部 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>
我为任务管理编写 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>
...但我有一个问题。当我创建了超过 1 个主任务(例如 2 个)并且我想向 1 个主任务添加子任务时,它会添加到列表的最后,在最后一个主任务下面。
如何解决?
为另一个 <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
您应该创建内部 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>