Javascript 切片不针对所有实例

Javascript 切片不针对所有实例,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我在我的页面中有一系列的跨距,在这些跨距中我使用一个类来控制各种样式。当一个条件发生变化时,我希望同时对这些类应用变化 例如: <SPAN class="zrow_1">...</SPAN> <SPAN class="zrow_2">...</SPAN> <SPAN class="zrow_3">...</SPAN> 现在,上面的内容在页面上第一次起作用,根据我的需要隐藏跨距;但是,第二组跨距不是。我做错了什么吗?使用sl

我在我的页面中有一系列的跨距,在这些跨距中我使用一个类来控制各种样式。当一个条件发生变化时,我希望同时对这些类应用变化

例如:

<SPAN class="zrow_1">...</SPAN>
<SPAN class="zrow_2">...</SPAN>
<SPAN class="zrow_3">...</SPAN>

现在,上面的内容在页面上第一次起作用,根据我的需要隐藏跨距;但是,第二组跨距不是。我做错了什么吗?

使用slice,您只获取整个页面中的前两个结果,而不是每组元素中的前两个结果。我将使用:

$("SPAN[class^='zrow_']").filter(function() {
    return parseInt($(this).prop("class").substring(5),10) <= 2;
}).hide();
这将返回所有zrow_1和zrow_2元素。您可以将硬编码的2更改为要对其应用操作的元素数


我知道问题出在哪里了。slice中的索引是从零开始的

支票:

更改$SPAN[class^='zrow_'].slice2.css{'display':'none'};到

$SPAN[class^='zrow\'].slice1.css{'display':'none'};这应该行得通


非常感谢。

这是因为您拥有的选择器将返回全部六个,但您只隐藏了其中两个

我只需要使用类名,并用逗号分隔它们

$("span.zrow_1, span.z_row_2").css({'display': 'none'});

谢谢,这是我一直在寻找的方法。通过使用slice,您只获取整个页面中的前两个结果。不是真的。带有单个参数的slice将返回从该元素到数组末尾的所有内容。如果j08691是正确的,slice将返回列表的尾部而不是头部。尽管如此,这仍然不是解决问题的正确方法:-虽然这不太适合在更大范围内复制。这实际上取决于目的。您始终可以使用for循环或任何其他方法生成选择器。其他解决方案的问题在于效率较低。虽然这里不会有太大的区别,但可能会在很大程度上影响性能。首先你要做的是一个模糊搜索,这比类搜索更麻烦,返回所有内容,然后过滤。此外,它混淆了代码。虽然这是学习新技术的一个好方法,但我会在生产中追求高效和可读性。但那只是我。
$("SPAN[class^='zrow_']").filter(function() {
    return parseInt($(this).prop("class").substring(5),10) <= 2;
}).hide();
$("span.zrow_1, span.z_row_2").css({'display': 'none'});