Javascript:用js替换html类no-js

时间:2013-02-20 20:59:04

标签: javascript regex

请解释以下javascript代码行

(function (d, c) {
    d[c] = d[c].replace(/\bno-js\b/, "js");
})(document.documentElement, "className");

此行替换文档元素类名 例如class="no-js"class="js"

。{

它工作正常,但我不完全理解。 d[c] = d[c].replace ???

3 个答案:

答案 0 :(得分:3)

我不确定为什么这会被贬低 - 看起来像是一个关于可变性的好问题。

原因是字符串不可变 - 您可以用新值替换它们,但不能更改它们。

最终结果是

d[c].replace()

实际上不会更改该值,而是返回具有更新值的新字符串。

只有通过分配返回的值才能使源更改。

d[c] = d[c].replace(...)

“进行替换,然后使用替换值作为原始值”

答案 1 :(得分:1)

Firs创建功能

function(d, c){
    d[c] = d[c].replace(/\bno-js\b/,"js");
}

它使用()包装函数将其转换为表达式,而不是语句,因此这种方式可以调用,然后传递参数

(documentElement, "className")

换句话说,执行以下代码:

document.documentElement["className"] = document.documentElement["className"].replace(/\bno-js\b/,"js");

然后检索文档的documentElement属性并根据正则表达式替换其“className”。

答案 2 :(得分:1)

(function(d, c) {
    d[c] = d[c].replace(/\bno-js\b/,"js"); }
)(document.documentElement, "className");

使用两个参数调用该函数。为清楚起见,我们将使用用于调用函数的参数替换函数中的变量。

// Find the element in the DOM identified by "documentElement"
// and access its "className" property, which controls the attribute in
// the markup called "class"
document.documentElement["className"] = 
// Then, take that same property (which is a string), and run
// .replace() on it, with a regex that says "find no-js separated by word
// boundaries", and replace that with js
// Finally, assign the result of that replacement to the original property.
document.documentElement["className"].replace(/\bno-js\b/,"js");