Javascript 为什么string.length没有更新?
Javascript 为什么string.length没有更新?,javascript,string-length,nodelist,Javascript,String Length,Nodelist,这是我自己编写的第一段代码。我正在尝试使用一个输入字段将项目添加到列表中,然后如果您按下按钮生成代码,它将收集所有选中的项目并将文本复制到另一个div中
基本上,我的问题围绕两个变量:
const list = listUl.children;
const listCopy = listUl.querySelectorAll('span');
假设列表中有4项。如果我向列表中添加一个新项目,我可以看到列表。长度添加此新项目,它将从4更改为5。
但listCopy.length不会发生这种情况。
这是我自己编写的第一段代码。我正在尝试使用一个输入字段将项目添加到列表中,然后如果您按下按钮生成代码,它将收集所有选中的项目并将文本复制到另一个div中
基本上,我的问题围绕两个变量:
const list = listUl.children;
const listCopy = listUl.querySelectorAll('span');
假设列表中有4项。如果我向列表中添加一个新项目,我可以看到列表。长度添加此新项目,它将从4更改为5。
但listCopy.length不会发生这种情况。该值保持为4
如果lstCopy在列表中,为什么会发生这种情况?
如何更新listCopy
这是我的密码:
常量addItemInput=document.querySelector'.addItemInput';
const addItemButton=document.querySelector'.addItemButton';
const copyText=document.querySelector'.generateCode';
const listUl=document.querySelector'.list';
const list=listUl.children;
const listCopy=listUl.queryselectoral'span';
const clonedCode=document.querySelector'.code p';
//功能:生成值/项=可拖动,复选框,删除按钮
const attachItemListButton=项目=>{
//拖拉的
item.draggable=true;
item.classList.addlist-item;
//复选框
让checkbox=document.createElement'input';
checkbox.type='checkbox';
checkbox.className='checkbox';
checkbox.name=chkboxName1;
checkbox.value=值;
checkbox.id=id;
item.insertBeforecheckbox,item.childNodes[0]| | null;
//移除按钮
让remove=document.createElement'button';
remove.className='remove';
remove.textContent='x';
项目1.2:移除;
};
对于let i=0;i{
让copyTextFromList=;
对于let i=0;i{
让li=document.createElement'li';
设span=document.createElement'span';
span.textContent=addItemInput.value;
李斯特;
李。斯潘;
附件列表按钮li;
addItemInput.value=;
};
//功能:移除按钮
addEventListener'click',事件=>{
如果event.target.tagName==“按钮”{
如果event.target.className=='remove'{
让li=event.target.parentNode;
设ul=li.parentNode;
ul.removeChildli;
}
}
};
/*谷歌字体*/
@导入url'https://fonts.googleapis.com/css?family=Heebo:300,400,700';
/*根*/
:根{
-白色:fff;
-黑色:2D3142;
-彩色-黑色-2:0E1116;
-颜色灰色:CEE5F2;
-颜色-gray-2:ACCBE1;
-颜色-灰色-3:CEE5F2;
-绿色:439775 ;;
-蓝色:4686CC;
}
身体{
字体系列:“Heebo”,无衬线;
字体大小:400;
字体大小:16px;
颜色:黑色;
}
氢{
字号:700;
字体大小:1.5rem;
}
h3{
字号:700;
字体大小:1.25rem;
}
钮扣{
背景:蓝色;
填充物:5px10px;
边界半径:5px;
颜色:白色;
}
[可拖动]{
-moz用户选择:无;
-khtml用户选择:无;
-webkit用户选择:无;
用户选择:无;
-khtml用户拖动:元素;
-webkit用户拖动:元素;
}
保险单{
列表样式类型:无;
填充:0;
最大宽度:300px;
}
.列表按钮{
背景:颜色为黑色;
}
.清单项目{
显示器:flex;
证明内容:之间的空间;
对齐项目:居中;
宽度:自动;
保证金:5px自动;
填充物:5px;
光标:移动;
背景:颜色为灰色;
边界半径:5px;
}
.list-item.draggingElement{
不透明度:0.4;
}
.list-item.over{
边框顶部:3倍纯色绿色;
}
按钮。移除{
保证金:自动0自动;
}
输入{
保证金:自动5px自动0;
}
.按钮包装{
显示器:flex;
柔性包装:包装;
证明内容:之间的空间;
最大宽度:300px;
}
.button包装器.addItemInput{
宽度:63%;
边界半径:5px 0 5px;
}
.button包装器.addItemButton{
宽度:35%;
边界半径:0 5px 5px 0;
}
.button包装器.generateCode{
宽度:100%;
背景:绿色;
边缘顶部:5px;
}
.p.代码{
背景:灰色;填充:5px;
边框:1px实心var-color-gray-2;
最小高度:20px;
字体大小:300;
}
标题
英雄
简介
页脚
添加项
生成代码
密码
节点列表有两种变体,活动节点和非活动节点。querySelectorAll返回一个非活动的静态节点列表。children返回一个live,它返回一个HTMLCollection,但您可以忽略这个区别
现在
要使listCopy也处于活动状态,可以使用listUl.getElementsByTagName'span'
要按类选择元素,请使用GetElementsByCassName。据我所知,没有办法使用CSS或XPath获取实时集合,即更复杂的查询。节点列表有两种变体,实时和非实时。querySelectorAll返回一个非活动的静态节点列表。children返回一个live,从技术上讲,它返回一个HTMLCollection,但您现在可以忽略这个区别
要使listCopy也处于活动状态,可以使用listUl.getElementsByTagName'span'
要按类选择元素,请使用GetElementsByCassName。据我所知,没有办法使用CSS或XPath获取实时集合,即更复杂的查询。问题是const listCopy=listUl.queryselectoral'span';从一开始就使用span数组启动
为了得到更新的列表
const listCopy=listUl.queryselectoral'span';将让listCopy=listUl.queryselectoral'span';在你的功能中
//Cloning code if there are checked items
copyText.addEventListener('click', () => {
// add the following line - in this way you will select the span from the updated list
listCopy = listUl.querySelectorAll('span');
let copyTextFromList = "";
for (let i = 0; i < listCopy.length; i += 1) {
if (listCopy[i].parentNode.querySelector("input:checked")) {
copyTextFromList += listCopy[i].textContent + ',';
}
}
clonedCode.innerHTML = copyTextFromList;
});
问题是const listCopy=listUl.queryselectoral'span';从一开始就使用span数组启动
为了得到更新的列表
const listCopy=listUl.queryselectoral'span';将让listCopy=listUl.queryselectoral'span';在你的功能中
//Cloning code if there are checked items
copyText.addEventListener('click', () => {
// add the following line - in this way you will select the span from the updated list
listCopy = listUl.querySelectorAll('span');
let copyTextFromList = "";
for (let i = 0; i < listCopy.length; i += 1) {
if (listCopy[i].parentNode.querySelector("input:checked")) {
copyTextFromList += listCopy[i].textContent + ',';
}
}
clonedCode.innerHTML = copyTextFromList;
});
如果您想使用querySelectorAll,这可能会有所帮助。每次检查长度时,它都会重新计算并返回值。Symbol.iterator可帮助您处理…个循环
常量addItemInput=document.querySelector'.addItemInput';
const addItemButton=document.querySelector'.addItemButton';
const copyText=document.querySelector'.generateCode';
const listUl=document.querySelector'.list';
const list=listUl.children;
常量列表副本={
获取长度{
返回listUl.queryselectoral'span'.length
},
*[符号.迭代器]{
设i=0;
const l=listUl.queryselectoral'span';
而我{
//拖拉的
item.draggable=true;
item.classList.addlist-item;
//复选框
让checkbox=document.createElement'input';
checkbox.type='checkbox';
checkbox.className='checkbox';
checkbox.name=chkboxName1;
checkbox.value=值;
checkbox.id=id;
item.insertBeforecheckbox,item.childNodes[0]| | null;
//移除按钮
让remove=document.createElement'button';
remove.className='remove';
remove.textContent='x';
项目1.2:移除;
};
对于let i=0;i{
让copyTextFromList=;
对于listCopy的let项{
如果item.parentNode.querySelectorinput:已选中{
copyTextFromList+=item.textContent+',';
}
}
clonedCode.innerHTML=copyTextFromList;
};
//将输入字段中的项目添加到列表中
addItemButton.addEventListener'click',=>{
让li=document.createElement'li';
设span=document.createElement'span';
span.textContent=addItemInput.value;
李斯特;
李。斯潘;
附件列表按钮li;
addItemInput.value=;
};
//功能:移除按钮
addEventListener'click',事件=>{
如果event.target.tagName==“按钮”{
如果event.target.className=='remove'{
让li=event.target.parentNode;
设ul=li.parentNode;
ul.removeChildli;
}
}
};
/*谷歌字体*/
@导入url'https://fonts.googleapis.com/css?family=Heebo:300,400,700';
/*根*/
:根{
-白色:fff;
-黑色:2D3142;
-彩色-黑色-2:0E1116;
-颜色灰色:CEE5F2;
-颜色-gray-2:ACCBE1;
-颜色-灰色-3:CEE5F2;
-绿色:439775 ;;
-蓝色:4686CC;
}
身体{
字体系列:“Heebo”,无衬线;
字体大小:400;
字体大小:16px;
颜色:黑色;
}
氢{
字号:700;
字体大小:1.5rem;
}
h3{
字号:700;
字体大小:1.25rem;
}
钮扣{
背景:蓝色;
填充物:5px10px;
边界半径:5px;
颜色:白色;
}
[可拖动]{
-moz用户选择:无;
-khtml用户选择:无;
-webkit用户选择:无;
用户选择:无;
-khtml用户拖动:元素;
-webkit用户拖动:元素;
}
保险单{
列表样式类型:无;
填充:0;
最大宽度:300px;
}
.列表按钮{
背景:颜色为黑色;
}
.清单项目{
显示器:flex;
证明内容:之间的空间;
对齐项目:居中;
宽度:自动;
保证金:5px自动;
填充物:5px;
光标:移动;
背景:var颜色-
灰色
边界半径:5px;
}
.list-item.draggingElement{
不透明度:0.4;
}
.list-item.over{
边框顶部:3倍纯色绿色;
}
按钮。移除{
保证金:自动0自动;
}
输入{
保证金:自动5px自动0;
}
.按钮包装{
显示器:flex;
柔性包装:包装;
证明内容:之间的空间;
最大宽度:300px;
}
.button包装器.addItemInput{
宽度:63%;
边界半径:5px 0 5px;
}
.button包装器.addItemButton{
宽度:35%;
边界半径:0 5px 5px 0;
}
.button包装器.generateCode{
宽度:100%;
背景:绿色;
边缘顶部:5px;
}
.p.代码{
背景:灰色;填充:5px;
边框:1px实心var-color-gray-2;
最小高度:20px;
字体大小:300;
}
标题
英雄
简介
页脚
添加项
生成代码
密码
如果您想使用querySelectorAll,这可能会有所帮助。每次检查长度时,它都会重新计算并返回值。Symbol.iterator可帮助您处理…个循环
常量addItemInput=document.querySelector'.addItemInput';
const addItemButton=document.querySelector'.addItemButton';
const copyText=document.querySelector'.generateCode';
const listUl=document.querySelector'.list';
const list=listUl.children;
常量列表副本={
获取长度{
返回listUl.queryselectoral'span'.length
},
*[符号.迭代器]{
设i=0;
const l=listUl.queryselectoral'span';
而我{
//拖拉的
item.draggable=true;
item.classList.addlist-item;
//复选框
让checkbox=document.createElement'input';
checkbox.type='checkbox';
checkbox.className='checkbox';
checkbox.name=chkboxName1;
checkbox.value=值;
checkbox.id=id;
item.insertBeforecheckbox,item.childNodes[0]| | null;
//移除按钮
让remove=document.createElement'button';
remove.className='remove';
remove.textContent='x';
项目1.2:移除;
};
对于let i=0;i{
让copyTextFromList=;
对于listCopy的let项{
如果item.parentNode.querySelectorinput:已选中{
copyTextFromList+=item.textContent+',';
}
}
clonedCode.innerHTML=copyTextFromList;
};
//将输入字段中的项目添加到列表中
addItemButton.addEventListener'click',=>{
让li=document.createElement'li';
设span=document.createElement'span';
span.textContent=addItemInput.value;
李斯特;
李。斯潘;
附件列表按钮li;
addItemInput.value=;
};
//功能:移除按钮
addEventListener'click',事件=>{
如果event.target.tagName==“按钮”{
如果event.target.className=='remove'{
让li=event.target.parentNode;
设ul=li.parentNode;
ul.removeChildli;
}
}
};
/*谷歌字体*/
@导入url'https://fonts.googleapis.com/css?family=Heebo:300,400,700';
/*根*/
:根{
-白色:fff;
-黑色:2D3142;
-彩色-黑色-2:0E1116;
-颜色灰色:CEE5F2;
-颜色-gray-2:ACCBE1;
-颜色-灰色-3:CEE5F2;
-绿色:439775 ;;
-蓝色:4686CC;
}
身体{
字体系列:“Heebo”,无衬线;
字体大小:400;
字体大小:16px;
颜色:黑色;
}
氢{
字号:700;
字体大小:1.5rem;
}
h3{
字号:700;
字体大小:1.25rem;
}
钮扣{
背景:蓝色;
填充物:5px10px;
边界半径:5px;
颜色:白色;
}
[可拖动]{
-moz用户选择:无;
-khtml用户选择:无;
-webkit用户选择:无;
用户选择:无;
-khtml用户拖动:元素;
-webkit用户拖动:元素;
}
保险单{
列表样式类型:无;
填充:0;
最大宽度:300px;
}
.列表按钮{
背景:颜色为黑色;
}
.清单项目{
显示器:flex;
证明内容:之间的空间;
对齐项目:居中;
宽度:自动;
保证金:5px自动;
填充物:5px;
光标:移动;
背景:颜色为灰色;
边界半径:5px;
}
.list-item.draggingElement{
不透明度:0.4;
}
.list-item.over{
边框顶部:3倍纯色绿色;
}
按钮。移除{
保证金:自动0自动;
}
输入{
保证金:自动5px自动0;
}
.按钮包装{
显示器:flex;
柔性包装:包装;
证明内容:之间的空间;
最大宽度:300px;
}
.button包装器.addItemInput{
宽度:63%;
边界半径:5px 0 5px;
}
.button包装器.addItemButton{
宽度:35%;
边界辐射
ius:0 5px 5px 0;
}
.button包装器.generateCode{
宽度:100%;
背景:绿色;
边缘顶部:5px;
}
.p.代码{
背景:灰色;填充:5px;
边框:1px实心var-color-gray-2;
最小高度:20px;
字体大小:300;
}
标题
英雄
简介
页脚
添加项
生成代码
密码
@好极了,我认为这个评论属于这个问题,而不是我的答案……你是对的——对不起,我不知道这是怎么回事happened@Bravo我认为这个评论属于这个问题,而不是我的答案…你是对的-对不起,我不知道这是怎么发生的这与字符串长度有什么关系?这与字符串长度有什么关系?