【发布时间】:2017-12-25 10:09:16
【问题描述】:
我有一个旧脚本,用于通过将类名称添加到正文标记来更改网站的字体大小,其部分功能是在将现有类更改为其他设置之一之前删除现有类。问题是有一个eval 行从body标签上的其他类中删除了“大”、“中”或“小”字样的任何实例,这些类充当页面的唯一标识符,这会干扰我的其他脚本正在使用。如何更改以下代码中的 eval 行,使其仅匹配整个单词?
/* Override CSS with global font size selected by user */
function changeFontSize(size) {
var oldClasses, currentClass;
/*sets key words to be eliminated*/
oldClasses = eval("/large|medium|small/ig");
/*gets the current class names*/
currentClass = document.body.className;
/*eliminates key words from string, then adds new size*/
document.body.className = currentClass.replace(oldClasses, "") + " " + size;
}
【问题讨论】:
-
...为什么这里首先有
eval?!?oldClasses = /large|medium|small/ig是一样的,除了不是邪恶的。如果需要自定义字符串,oldClasses = new RegExp(['large', 'medium', 'small'].join('|'), 'ig')。 (这里不回答问题,只是表示怀疑。) -
“如何更改以下行,使其仅搜索整个单词?” 问题不清楚。 “搜索”在哪里发生?
-
我对 eval 不是很熟悉,所以我不能告诉你为什么它是必要的。我从上下文假设它的目的是列出脚本在分配给 body 标记的类中查找的术语。
标签: javascript string eval string-matching