gpt4 book ai didi

javascript - 条件语句不响应结果

转载 作者:行者123 更新时间:2023-11-30 13:09:33 25 4
gpt4 key购买 nike

在我的页面上可能填充了任意数量的 UL,每个最多 3 个 LI。我已将此条件语句设置为处理左边距,具体取决于可能有​​多少 LI。它记录了正确的结果,但它总是应用 css,就好像结果是 1,即使结果是 2 或 3 ...我对此很陌生,所以也许我遗漏了一些对更有经验的人来说显而易见的东西.每个 LI 都有 40px 的宽度和高度以及背景图像。文本缩进,因此不显示。

$("ul.links").each(function(){    
var num = $(this).children().length;
if (num == 1) {
$('ul.links li:first-child').css('margin-left','125px');
}
else if (num == 2) {
$('ul.links li:first-child').css('margin-left','96px');
}
else {
$('ul.links li:first-child').css('margin-left','71px');
}
//console.log(num);
});

<ul class="links">
<li><a href="#">First</a></li>
<li><a href="#">Second</a></li>
<li><a href="#">Third</a></li>
</ul>

最佳答案

你的问题在这里:

$('ul.links li:first-child').css('margin-left','71px');

您正在再次选择所有 ul.links 并将边距应用于所有这些链接(或者更确切地说是它们的第一个子链接)。您需要使用 this 将其仅应用于您正在迭代的对象。

试试这个(没有双关语意):

$("ul.links").each(function(){    
var num = $(this).children().length;
if (num == 1) {
$(this).children().first().css('margin-left','125px');
}
else if (num == 2) {
$(this).children().first().css('margin-left','96px');
}
else {
$(this).children().first().css('margin-left','71px');
}
console.log(num);
});

查看 fiddle here .

正如 epascarello 指出的那样,为了提高效率,您应该缓存 jQuery 对象而不是重新创建它两次。所以添加:

var $elem = $(this);

然后无论哪里有 $(this),您都可以用 $elem 替换它。这样做的原因是每次您使用 $(something) 时,您都在创建一个新的 jQuery 对象,它有一些开销。对于 $(this) 它非常小,但如果您使用复杂的选择器,开销可能会很大。

此外,正如 epascarello 所做的那样,您可以通过为边距创建一个变量然后在条件 block 的末尾应用它来在源代码中节省几个字节。此外,如果您决定更改选择器(也许您决定将其应用于第二个 child 而不是第一个)或更改您想要摆弄的属性,这确实会让事情变得更容易一些。

关于javascript - 条件语句不响应结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14401821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com