我发现了一个伟大的Javascript代码(StackOverflow链接:如何添加一个类到正文标签?)。但是,我在实现它时遇到了麻烦。
下面是我在测试页面上使用的代码:<!doctype html>
<html>
<head>
<title>Javascript Test</title>
<meta charset="utf-8" />
<script type="text/javascript">
var newClass = window.location.href;
newClass = newClass.match(//[^/]+(_|.)[^/]+$/);
$(document.body).addClass(newClass);
</script>
</head>
<body>
</body>
</html>
但是,我没有看到任何类添加到body标签的结果。(在Safari, Chrome中查看源代码)我已经测试了使用和不使用jQuery。
你看到代码有什么问题了吗?
我正在与Behance ProSite合作。我可以创建多个画廊,但每个画廊都有相同的背景,因为它们使用相同的模板。我需要为body标签添加一个唯一的类,这样我就可以针对每个标签使用不同的CSS背景属性。
要向body标签添加一个类,您可以在普通Javascript中执行以下操作,而不需要包含一些臃肿的第三方库
如果类已经存在,则
document.body.className += " something";
否则document.body.className = "something";
关于jsfiddle的示例
要在页面完成加载后添加类,请使用addEventListener并为窗口创建处理程序。onload事件
load事件在文档加载过程结束时触发。在此时,文档中的所有对象都在DOM中图片和子帧已经加载完毕。
window.addEventListener("load", function () {
document.body.className = "something";
}, false);
这段代码有一些小问题:
- 确保
match
中的正则表达式实际上匹配您的URL模式。我认为Behance Prosites使用的URL模式像/1234/section
和/1234/5678/section/item
。 -
match
函数返回一个数组,所以你不能将newClass
直接传递给addClass
。您需要传递一个数组项,如newClass[0]
。 因为你的脚本在
<head>
中,它不能修改<body>
,因为它在执行时不存在。您要么需要将脚本移动到页面底部,要么延迟执行,直到加载DOM之后。这个片段应该专门适用于Behance Prosites。正则表达式用至少一个非数字字符匹配URL路径段,以从URL中过滤出/1234/5678/
,因此在上面的示例URL中,newClass[0]
将是section
。
$(document).ready(function() {
var path = window.location.pathname;
var newClass = path.match(/[^/]*[^d/][^/]*/);
$('body').addClass(newClass[0]);
});
祝你好运!