从一个 div 添加到另一个 javascript 和 appendchild(不工作)
Adding from one div to another with javascript with appendchild(not working)
嘿,所以我正在尝试制作一个 "Website",您可以在其中添加和删除列表中的人员以及添加到另一个列表中。添加有效但删除不能正常工作。如您所见,添加和删除子句彼此非常相似,唯一的区别是 getElementById()
.
中的 id
let names = [];
names[0] = "Daniel";
names[1] = "Anna";
names[2] = "Sarah";
names[3] = "Karl";
names[4] = "Tim";
names[5] = "Simon";
names[6] = "Klara";
names[7] = "David";
names[8] = "Hugo";
document.getElementById("add").addEventListener("click",add);
document.getElementById("remove").addEventListener("click",remove);
for(let i = 0; i < 9; i++){
document.getElementById("participants").innerHTML += "<div class='normal' id='"+names[i]+"'>"+names[i]+"</div>";
}
for(let i = 0; i < 9; i++){
document.getElementById(names[i]).addEventListener("click",chosen);
}
function chosen(){
let item = document.getElementById(this.id);
if(item.classList.contains("chosen")){
item.classList.remove("chosen");
}else{
item.classList.add("chosen");
}
}
function add(){
let arr = [];
arr = document.getElementsByClassName("chosen");
for(let i = 0; i < arr.length; i++){
document.getElementById("members").appendChild(arr[i]);
}
}
function remove(){
let test = [];
test = document.getElementsByClassName("chosen");
console.log(test);
for(let i = 0; i < test.length; i++){
document.getElementById("participants").appendChild(test[i]);
}
}
如果您先添加项目,然后设置一个事件侦听器,在父元素上侦听 click
,您可能会有更好的方法。根据目标,您将分派 chosen
函数。
你可以利用事件冒泡来做到这一点。当您创建单独的 for
语句时,不能保证在 for 语句完成到 运行.
之后元素将立即位于 DOM 中
var participants = document.getElementById('participants');
participants.onclick = function(event){
var id = event.target.id;
if(id){
let item = document.getElementById(this.id);
if(item.classList.contains("chosen")){
item.classList.remove("chosen");
}else{
item.classList.add("chosen");
}
//... the rest of your code
}
}
你看,你可以将 id 参数传递给所选函数,这样你就会得到正确的元素。
这样:
之前
document.getElementById(names[i]).addEventListener("click",chosen)
.
.
.
function chosen() {
let item = document.getElementById(this.id);
if(item.classList.contains("chosen"))
item.classList.remove("chosen");
else
item.classList.add("chosen");
}
之后
document.getElementById(names[i]).addEventListener("click",chosen(names[i])
.
.
.
function chosen(chosenId) {
const item = document.getElementById(chosenId);
item.classList.toggle("chosen")
}
并尝试在这种情况下始终使用 const 变量,这会为您的代码提供更多的可预测性
你的代码有几个错误,选择 class 在添加和删除项目后没有清理,不是所有的元素都被添加或删除。
以下解决这些问题。
如果你需要帮助 ping 我,我建议你重构它并使其更通用。
const names = ["Daniel", "Anna", "Sarah", "Karl", "Tim" ,"Simon", "Klara", "David"];
document.getElementById("add").addEventListener("click",add);
document.getElementById("remove").addEventListener("click",remove);
for(let i = 0; i < names.length; i++){
document.getElementById("participants").innerHTML += "<div class='normal' id='"+names[i]+"'>"+names[i]+"</div>";
}
for(let i = 0; i < names.length; i++){
document.getElementById(names[i]).addEventListener("click",chosen);
}
function chosen(){
let item = document.getElementById(this.id);
if(item.classList.contains("chosen")){
item.classList.remove("chosen");
}else{
item.classList.add("chosen");
}
}
function add(){
members = document.getElementById("members");
Array.from(document.querySelectorAll(".chosen")).forEach((item)=> {
members.append(item)
item.classList.remove("chosen");
})
}
function remove(){
participants = document.getElementById("participants");
Array.from(document.querySelectorAll(".chosen")).forEach((item)=> {
participants.append(item)
item.classList.remove("chosen");
})
}
嘿,所以我正在尝试制作一个 "Website",您可以在其中添加和删除列表中的人员以及添加到另一个列表中。添加有效但删除不能正常工作。如您所见,添加和删除子句彼此非常相似,唯一的区别是 getElementById()
.
let names = [];
names[0] = "Daniel";
names[1] = "Anna";
names[2] = "Sarah";
names[3] = "Karl";
names[4] = "Tim";
names[5] = "Simon";
names[6] = "Klara";
names[7] = "David";
names[8] = "Hugo";
document.getElementById("add").addEventListener("click",add);
document.getElementById("remove").addEventListener("click",remove);
for(let i = 0; i < 9; i++){
document.getElementById("participants").innerHTML += "<div class='normal' id='"+names[i]+"'>"+names[i]+"</div>";
}
for(let i = 0; i < 9; i++){
document.getElementById(names[i]).addEventListener("click",chosen);
}
function chosen(){
let item = document.getElementById(this.id);
if(item.classList.contains("chosen")){
item.classList.remove("chosen");
}else{
item.classList.add("chosen");
}
}
function add(){
let arr = [];
arr = document.getElementsByClassName("chosen");
for(let i = 0; i < arr.length; i++){
document.getElementById("members").appendChild(arr[i]);
}
}
function remove(){
let test = [];
test = document.getElementsByClassName("chosen");
console.log(test);
for(let i = 0; i < test.length; i++){
document.getElementById("participants").appendChild(test[i]);
}
}
如果您先添加项目,然后设置一个事件侦听器,在父元素上侦听 click
,您可能会有更好的方法。根据目标,您将分派 chosen
函数。
你可以利用事件冒泡来做到这一点。当您创建单独的 for
语句时,不能保证在 for 语句完成到 运行.
var participants = document.getElementById('participants');
participants.onclick = function(event){
var id = event.target.id;
if(id){
let item = document.getElementById(this.id);
if(item.classList.contains("chosen")){
item.classList.remove("chosen");
}else{
item.classList.add("chosen");
}
//... the rest of your code
}
}
你看,你可以将 id 参数传递给所选函数,这样你就会得到正确的元素。
这样:
之前
document.getElementById(names[i]).addEventListener("click",chosen)
.
.
.
function chosen() {
let item = document.getElementById(this.id);
if(item.classList.contains("chosen"))
item.classList.remove("chosen");
else
item.classList.add("chosen");
}
之后
document.getElementById(names[i]).addEventListener("click",chosen(names[i])
.
.
.
function chosen(chosenId) {
const item = document.getElementById(chosenId);
item.classList.toggle("chosen")
}
并尝试在这种情况下始终使用 const 变量,这会为您的代码提供更多的可预测性
你的代码有几个错误,选择 class 在添加和删除项目后没有清理,不是所有的元素都被添加或删除。 以下解决这些问题。 如果你需要帮助 ping 我,我建议你重构它并使其更通用。
const names = ["Daniel", "Anna", "Sarah", "Karl", "Tim" ,"Simon", "Klara", "David"];
document.getElementById("add").addEventListener("click",add);
document.getElementById("remove").addEventListener("click",remove);
for(let i = 0; i < names.length; i++){
document.getElementById("participants").innerHTML += "<div class='normal' id='"+names[i]+"'>"+names[i]+"</div>";
}
for(let i = 0; i < names.length; i++){
document.getElementById(names[i]).addEventListener("click",chosen);
}
function chosen(){
let item = document.getElementById(this.id);
if(item.classList.contains("chosen")){
item.classList.remove("chosen");
}else{
item.classList.add("chosen");
}
}
function add(){
members = document.getElementById("members");
Array.from(document.querySelectorAll(".chosen")).forEach((item)=> {
members.append(item)
item.classList.remove("chosen");
})
}
function remove(){
participants = document.getElementById("participants");
Array.from(document.querySelectorAll(".chosen")).forEach((item)=> {
participants.append(item)
item.classList.remove("chosen");
})
}