当我试图将typescript代码编译成javascript时,得到**Type';诺德利斯托夫<;元素>';不是数组类型或字符串类型**
当我尝试将typescript代码编译成javascript时,获取类型“NodeListOf”不是数组类型或字符串类型当我试图将typescript代码编译成javascript时,得到**Type';诺德利斯托夫<;元素>';不是数组类型或字符串类型**,javascript,html,typescript,Javascript,Html,Typescript,当我尝试将typescript代码编译成javascript时,获取类型“NodeListOf”不是数组类型或字符串类型 if (query.length) { var regex = new RegExp("(" + query + ")", "gm"); var li = document.querySelectorAll("#id li"); //error
if (query.length) {
var regex = new RegExp("(" + query + ")", "gm");
var li = document.querySelectorAll("#id li"); //error
for (var Element of li){
Element.innerHTML = Element.innerHTML.replace(regex, '<span class="classname">$1</span>');
}
}
}
if(query.length){
var regex=new RegExp(“(“+query+”),“gm”);
var li=document.queryselectoral(#id li”);//错误
对于(li的var元素){
Element.innerHTML=Element.innerHTML.replace(regex,$1');
}
}
}
试试这个。。将解决问题
if(query.length){
var模式=新的RegExp(“(“+query+”),“gim”);
var li=document.queryselectoral(“test li”);
对于(li的var元素){
Element.innerHTML=Element.innerHTML.replace(模式“$1”);
}
}
试试这个。。将解决问题
if(query.length){
var模式=新的RegExp(“(“+query+”),“gim”);
var li=document.queryselectoral(“test li”);
对于(li的var元素){
Element.innerHTML=Element.innerHTML.replace(模式“$1”);
}
}
下面的代码编译得很好,我已经内联添加了注释
let query = '';
if (query.length) {
var pattern = new RegExp("(" + query + ")", "gim");
var li: NodeListOf<Element> = document.querySelectorAll("#test li");
// ES5 does not allow TS iteration of NodeListOf<Element> nor use of Array.from
// so it is necessary to loop over it manually.
// Note that Element is an existing type which caused a conflict with "(var Element of list)".
// It was necessary to rename Element to element.
for (let i = 0; i < li.length; i++) {
let element = li[i];
element.innerHTML = element.innerHTML.replace(pattern, '<span class="target">$1</span>');
}
}
let query='';
if(query.length){
var模式=新的RegExp(“(“+query+”),“gim”);
var li:NodeListOf=document.queryselectoral(“#test li”);
//ES5不允许对NodeListOf进行TS迭代,也不允许使用Array.from
//因此,有必要手动对其进行循环。
//请注意,元素是导致与“(列表的var元素)”冲突的现有类型。
//有必要将元素重命名为元素。
for(设i=0;i
下面的代码编译得很好,我已经内联添加了注释
let query = '';
if (query.length) {
var pattern = new RegExp("(" + query + ")", "gim");
var li: NodeListOf<Element> = document.querySelectorAll("#test li");
// ES5 does not allow TS iteration of NodeListOf<Element> nor use of Array.from
// so it is necessary to loop over it manually.
// Note that Element is an existing type which caused a conflict with "(var Element of list)".
// It was necessary to rename Element to element.
for (let i = 0; i < li.length; i++) {
let element = li[i];
element.innerHTML = element.innerHTML.replace(pattern, '<span class="target">$1</span>');
}
}
let query='';
if(query.length){
var模式=新的RegExp(“(“+query+”),“gim”);
var li:NodeListOf=document.queryselectoral(“#test li”);
//ES5不允许对NodeListOf进行TS迭代,也不允许使用Array.from
//因此,有必要手动对其进行循环。
//请注意,元素是导致与“(列表的var元素)”冲突的现有类型。
//有必要将元素重命名为元素。
for(设i=0;i
这同样有效:
let elements: any = document.querySelectorAll(".class");
for(let ele of elements) {
// do stuff
}
这也适用于:
let elements: any = document.querySelectorAll(".class");
for(let ele of elements) {
// do stuff
}
我猜错误在
forEach
行,而不是querySelector
行。问题在于它所说的是什么,即节点列表不是数组类型。请尝试[…li]
或数组。从(li)
。还有,为什么要循环两次,一次使用forEach
,然后再次使用for…of
?@torazaburo在删除for每个循环后仍然会得到相同的错误。正如我所说,您必须对(数组的var元素.from(li))执行。或者,如果您没有可用的数组.from
,则用于(var x=0;x
。我猜错误在forEach
行,而不是querySelector
行。问题在于它所说的是什么,即节点列表不是数组类型。请尝试[…li]
或数组。从(li)
。还有,为什么要循环两次,一次使用forEach
,然后再次使用for…of
?@torazaburo在删除for每个循环后仍然会得到相同的错误。正如我所说,您必须对(数组的var元素.from(li))执行。或者,如果您没有可用的Array.from
,则为(var x=0;x
。您测试过这个吗?将li
强制转换为any
将抑制错误消息,但我不确定它是否解决了潜在的不兼容性问题。您测试过这个吗?将li
强制转换为any
将抑制错误消息,但我不确定它是否解决了潜在的不兼容性。奇怪!结果表明,缺少tsconfig.json
文件将导致tsc
假定Array.from
可用,即使它是ES2015功能。我已经纠正了,奇怪!结果表明,缺少tsconfig.json
文件将导致tsc
假定Array.from
可用,即使它是ES2015功能。我已经改正了。