我的问题与Reduce multiple if else statements
非常相似我有多个if else语句,我想使用jquery每个函数来提高代码的效率,但我无法弄清楚如何去做。
我在wordpress中运行jQuery,我相信在noconflict模式下运行,所以我无法获得更多(我考虑的)高级主题,这些主题为我提供了示例,因为我无法理解正确使用的函数语法。
如果有人可以帮助并解释如何为我做这将是惊人的。这是我的代码:
var $h6p = $("h6 + p");
var $h5p = $("h5 + p");
var $h4p = $("h4 + p");
var $h3p = $("h3 + p");
var $h2p = $("h2 + p");
var $h1p = $("h1 + p");
var $fullercolor_bg = "rgba(240,234,222,0.9)";
if($h1p.mouseIsOver()) {
$h1p.prev().css("background-color", $fullercolor_bg);
} else {
$h1p.prev().css("background-color", "");
}
if($h2p.mouseIsOver()) {
$h2p.prev().css("background-color", $fullercolor_bg);
} else {
$h2p.prev().css("background-color", "");
}
if($h3p.mouseIsOver()) {
$h3p.prev().css("background-color", $fullercolor_bg);
} else {
$h3p.prev().css("background-color", "");
}
if($h4p.mouseIsOver()) {
$h4p.prev().css("background-color", $fullercolor_bg);
} else {
$h4p.prev().css("background-color", "");
}
if($h5p.mouseIsOver()) {
$h5p.prev().css("background-color", $fullercolor_bg);
} else {
$h5p.prev().css("background-color", "");
}
if($h6p.mouseIsOver()) {
$h6p.prev().css("background-color", $fullercolor_bg);
} else {
$h6p.prev().css("background-color", "");
}
(如果CSS有一个先前相邻的兄弟选择器,那么此时我就会越过月球。)
编辑:感谢您的帮助到目前为止,我应该提到的一件事是,else语句的空白设置是故意的。我已经使用CSS来定位兄弟选择器,并设置了背景颜色,所以我需要设置它。不透明。
答案 0 :(得分:5)
也许你可以使用:header
选择器来做这样的事情。
$(':header + p').each(function () {
var $this = $(this);
$this.prev().css({
backgroundColor: $this.mouseIsOver()? 'rgba(240,234,222,0.9)' : 'transparent'
});
});
答案 1 :(得分:2)
您可以使用数组:
var $hp = ["h6 + p", "h5 + p", "h4 + p", "h3 + p", "h2 + p", "h1 + p"],
$fullercolor_bg = "rgba(240,234,222,0.9)";
$hp.forEach(function(v) {
if($(v).mouseIsOver()) {
$(v).prev().css({
backgroundColor: $fullercolor_bg
});
} else {
$(v).prev().css({
backgroundColor: "transparent"
});
}
});
在你的情况下,我认为在变量中使用多个CSS选择器更简单。根据{{1}}:
的实施情况,这可能有效,也可能无效mouseIsOver
答案 2 :(得分:1)
创建一个选择器以获取单个jQuery对象中的所有元素,然后使用each
method循环遍历它们:
var $fullercolor_bg = "rgba(240,234,222,0.9)";
$("h6 + p,h5 + p,h4 + p,h3 + p,h2 + p,h1 + p").each(function(i, el){
if($(el).mouseIsOver()) {
$(el).prev().css("background-color", $fullercolor_bg);
} else {
$(el).prev().css("background-color", "");
}
});
或使用条件运算符选择值:
var $fullercolor_bg = "rgba(240,234,222,0.9)";
$("h6 + p,h5 + p,h4 + p,h3 + p,h2 + p,h1 + p").each(function(i, el){
$(el).prev().css("background-color", $(el).mouseIsOver() ? $fullercolor_bg : "");
});