Javascript 第n个子脚本样式
我目前正在应用基于第2个孩子身高总和的css类,例如,如果第2个孩子的身高+第3个孩子的身高等于x,则添加特定的类 这是我要计算的javascript-Javascript 第n个子脚本样式,javascript,css,Javascript,Css,我目前正在应用基于第2个孩子身高总和的css类,例如,如果第2个孩子的身高+第3个孩子的身高等于x,则添加特定的类 这是我要计算的javascript- $(function() { var fl = $('ul img:nth-child(3n+3)').height(); var fr = $('ul img:nth-child(3n+4)').height(); var result = fl += fr; if (result == 1092) { $('ul img:nth-c
$(function() {
var fl = $('ul img:nth-child(3n+3)').height();
var fr = $('ul img:nth-child(3n+4)').height();
var result = fl += fr;
if (result == 1092) {
$('ul img:nth-child(3n+3)').addClass('style1a');
$('ul img:nth-child(3n+4)').addClass('style1b');
}
else if (result == 2460) {
$('ul img:nth-child(3n+3)').addClass('style2a');
$('ul img:nth-child(3n+4)').addClass('style2b');
}
else if (result == 1776) {
$('ul img:nth-child(3n+3)').addClass('style3a');
$('ul img:nth-child(3n+4)').addClass('style3b');
}
});
这几乎可以完美地工作,它计算3n+3和3n+4的第一次迭代的高度,并将样式应用于所有3n+3
但是,我需要修改javascript来计算3n+3和3n+4的每次迭代的高度,而不仅仅是第一次迭代,然后应用样式
li(3)+li(4)之和添加样式,li(6)+li(7)之和添加样式
提前谢谢 这似乎不是解决这个问题的干净方法。首先,依赖精确的高度可能真的很麻烦,因为如果一个像素发生变化,代码就会被抛出。考虑在元素上使用小于/大于vs等于或设置类。此外,还应该声明一次jQuery变量。快速重构:
$(function() {
var foo = $('ul img:nth-child(3n+3)');
var bar = $('ul img:nth-child(3n+4)');
switch(foo.height() + bar.height()) {
case == 1092:
// You really should avoid relying on exact heights
// Maybe try some other method to determine style
foo.addClass('style1a');
bar.addClass('style1b');
break;
case == 2460:
foo.addClass('style2a');
bar.addClass('style2b');
break;
case == 1776:
foo.addClass('style2a');
bar.addClass('style3b');
break;
}
$返回元素的集合(即使只有一个匹配元素,它仍会放入集合中)。因为$总是返回一个集合,如果jQuery认为合适,它会查找集合的第一个成员的属性/方法;each()是您想要用来避免这种行为的 函数体的前几行应该是:
var height;
$('ul img:nth-child(3n+3)').each(function(index, element) {
height += element.height;
}
$('ul img:nth-child(3n+4)').each(function(index, element) {
height += element.height;
}
在同一行上使用=和+=计算结果的方式是奇怪的,尽管这段代码会处理这一点。因为需要分别处理每对元素,所以需要在集合上循环。大概是这样的:
-
我不太理解您的问题。我看不到这里的整个场景,所以一个简单的演示可能会有所帮助。当前的演示--正如你所看到的,照片没有正确地并排排列,因为应用了错误的类。它是在第一个(3n+3)+(3n+4)的基础上应用样式的,这就是为什么它工作得很好@无望的“如果第二个孩子的身高+第三个孩子的身高等于x以上,添加特定类别”从您发布的内容中,您的代码正在检查第二个孩子的身高+第三个孩子的身高是否等于x。抱歉,我头脑中正在研究一个旧版本,但同样的原则适用看起来适用于哪个类别取决于身高,因此,在此处使用选择器n子项
可能没有帮助,甚至会让人困惑。我猜您必须循环查看所有的img
(当然,例如通过第3步),检查当前的img并适当地添加类。请注意,此$('ul img:nth child(3n+3)').height()
将返回集合中第一个元素(由jQuery收集)的height
。因此,您的代码只是意味着与许多其他img
s的样式类似的东西,这些样式仅取决于第一个img
,这可能不是您想要的。虽然重构可能是有益的,但它并不能回答实际问题。我不确定我可以使用什么来代替确切的高度、一点背景。。。用户将上传一个完整的图像文件(500+),不知道这些图像是什么,除非它们总是800px。我可以用if比x好,比xJames少。虽然我在跨浏览器时遇到了一些问题,但你的想法似乎是可行的。Chrome-页面刷新的中断。狩猎-根本不工作。Firefox-始终工作-它与我的设置完美配合-除了刷新问题Just required$(window.load())
var $threes = $('ul img:nth-child(3n+3)'); // get the collection of all 3n+3 elements
var $fours = $('ul img:nth-child(3n+4)'); // get the collection of all 3n+4 elements
for(var i = 0; i < $fours.length; i++){
var $three = $threes.eq(i); // get the individual element
var $four = $fours.eq(i); // get the individual element
var result = $three.height() + $four.height();
if (result == 109) {
$three.addClass('style1a');
$four.addClass('style1b');
} else if (result == 246) {
$three.addClass('style2a');
$four.addClass('style2b');
} else if (result == 177) {
$three.addClass('style3a');
$four.addClass('style3b');
}
}