我有以下功能: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