我正在使用这个jQ来根据另一个(父/祖父母等)元素的类将一个类添加到两个不同的元素:
$(document).ready(function(){
var containerClass = $('#main-content').attr('class');
$('#nav-primary li#'+containerClass).addClass('active');
$('#aux-left div[id$='+containerClass+']').addClass('active');
});
很棒,但我有两个问题:
首先,当<div id="main-content">
中根本没有课程时,'有效'课程会添加到所有#nav-primary LIs,也会添加到 all #aux-left DIVs;如何修改它,以便在#main-content上没有任何课程时,什么都不做?
其次,我如何只定位要存储在'containerClass'变量中的多个类的第一个或第二个,例如<div id="main-content" class="apples bananas">
?
非常感谢! SVS
答案 0 :(得分:1)
对于1:在第一行之后执行if子句,例如像这样:
if(containerClass.length > 1) {
//your addClass code
}
//编辑:在您的脚本中定义containerClass
后,将放置上述内容。它只是通过测量变量(.length
)的内容来检查容器是否有类。如果containerClass =“”,则此if条件将为false,并且不会执行包含的代码。因此,它应该可以防止您的第一个问题发生:“活动”类被添加到其所有子级,无论#main-content
是否有类
2:
classes = containerClass.split(' '); //split by space
if(classes[1]) { //if there is a 2nd class
//do something if there are multiple classes
//access the 1st class with classes[0], etc.
} else {
//do something if #main-content only has 1 class
}
//编辑:在上面,第一行用空格分割变量containerClass
所包含的内容。你可以将它与php的explode
函数进行比较:假设你的容器有2个类(class =“aplles bananas”),你在拆分空间后最终会得到的是一个包含这两个类的数组像这样:
classes[0] = 'apples';
classes[1] = 'bananas';
所以现在你有第一和第二课,如果他们存在的话。
如果#main-content有第二个类(此处为“bananas”),我代码中的下一行会执行某些操作,但您也可以使用
检查第一个类if(classes[0]) { ...
如果#main-content没有第二类,我的代码中会出现“else”部分。你可以扩展上面的if-else-condition,首先检查第一类是否存在,然后检查是否存在第二类,然后在#main-content根本没有任何类的情况下做其他事情(或什么也不做)。我希望这更清楚。
希望这会有所帮助。在不相关的说明中,您可能希望在此帖子的标签中添加“jquery”,以便更多人可以找到它:)
答案 1 :(得分:0)
仍然不完全......我会再试一次,希望这对别人有用:
这就是我所处的位置(暂时不需要检查至少有一个班级):
$(document).ready(function(){
contentClasses = $('#main-content').attr('class');
contentClass = contentClasses.split(' '); // split by space
$('#nav-primary li#'+contentClass).addClass('active');
$('#aux-left div[id$='+contentClass+']').addClass('active');
}); // close doc.ready
...但如果<div id="main-content">
上有多个班级,则无法正常工作。奇怪的是,'主动'类被正确地添加到#nav-primary LI但不添加到#aux-left div。控制台报告以下内容:“警告:预期']'终止属性选择器但找到','。”
任何澄清将不胜感激。 SVS