2017-04-03 116 views
0

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

我得到:

無法設置屬性未定義

+0

是什麼'this.replaceAll()'做什麼?這個錯誤很可能存在(事實上,你在類列表中多次有'toolbar-open')。 – Boldewyn

+0

謝謝。我簡化了代碼,不調用replaceAll函數,而只是將className設置爲'xxx'。但這似乎並不奏效。 – Richard

+1

'getElementsByClassName'集合是活的,當您爲其某個項目更改某個類時,它將從集合中移除。 – georg

回答

0

不知道什麼replaceAll做的 '類名' ,它應該看起來像

function replaceAll(reg,input,replace) { 
 
return input.replace(reg, function(match){ 
 
    return replace 
 
}) 
 
} 
 

 
var r = replaceAll(/ toolbar-open/g, 'toolbar toolbar-md toolbar-open toolbar-open toolbar-open toolbar-open', '') 
 

 
console.log(r)

+1

謝謝,但我的replaceAll函數工作正常。我似乎無法設置clasName。 – Richard

0

感謝來自喬治的意見,以下工作:

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++) { 
     if (extraItemsElements && extraItemsElements[i] && extraItemsElements[i].className) { 
     extraItemsElements[i].className = replacements[i]; 
     } 
    } 
    } 

    replaceAll(str, find, replace): string { 
    let returnValue: string = str.replace(new RegExp(find, 'g'), replace); 
    return returnValue; 
    }``