我有以下功能:JavaScript字符串未设置
contractToobar(): void {
let extraItemsElements = document.getElementsByClassName('toolbar-open');
if (extraItemsElements && extraItemsElements.length > 0) {
for (let i: number = 0; i < extraItemsElements.length; i++) {
extraItemsElements[i].className = 'xxx';
console.log('after: ', extraItemsElements[i].className);
}
}
}
我想设置extraItemsElements[i].className
。但是,代码输出的情况如下:
after: toolbar toolbar-md toolbar-open toolbar-open toolbar-open toolbar-open
我期望的值是'xxx'
:
即className
没有被设置为xxx
值。
任何意见赞赏。
UPDATE
如果我尝试以下方法:
contractToobar(): void {
let replacements: string[] = [];
let extraItemsElements = document.getElementsByClassName('toolbar-open');
if (extraItemsElements && extraItemsElements.length > 0) {
for (let i: number = 0; i < extraItemsElements.length; i++) {
let s: string = this.replaceAll(extraItemsElements[i].className, ' toolbar-open', '');
replacements[1] = s;
}
}
for (let i: number = 0; i < replacements.length; i++) {
extraItemsElements[i].className = replacements[i];
console.log('after: ', extraItemsElements[i].className);
}
}
replaceAll(str, find, replace): string {
let returnValue: string = str.replace(new RegExp(find, 'g'), replace);
return returnValue;
}
我得到:
无法设置属性未定义
是什么'this.replaceAll()'做什么?这个错误很可能存在(事实上,你在类列表中多次有'toolbar-open')。 – Boldewyn
谢谢。我简化了代码,不调用replaceAll函数,而只是将className设置为'xxx'。但这似乎并不奏效。 – Richard
'getElementsByClassName'集合是活的,当您为其某个项目更改某个类时,它将从集合中移除。 – georg