2017-04-03 64 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; 
    }``