0

预期结果是使第一个和最后一个选定 div 之间的所有特殊 div 变为红色。

这行得通,但写得更好吗?:

var s = $('div.selected'),
    $spec = $('.speial'),
    i = s.first().index('.speial'),
    last = s.last().index('.speial');
for(;i<last;i++){
  $spec.eq(i).addClass('gored');
}

我正在尝试这个:

var s = $('div.selected'),
    $spec = $('.speial'),
    i = s.first().index($spec),
    last = s.last().index($spec);
for(;i<last;i++){
  $spec.eq(i).addClass('gored');
}

但它不起作用......我对原因很感兴趣。或者也许有更好的方法来达到同样的结果?

编辑:我已经制作了小提琴来获取问题的图片:)小提琴

4

4 回答 4

1

不看 HTML 就很难准确说出你想要什么

请澄清我是否弄错了,但似乎您想将类添加gored到所有.speial范围内div.selected

在这种情况下,这更容易:

$('div.selected .speial').addClass("gored");

正如我所说,这可能是错误的,请随时用简单的英语准确地澄清您想要的内容(最好使用 HTML 片段)

于 2012-08-16T12:51:59.580 回答
0

尝试使用 CSS :first-child 和 :last-child 选择器

于 2012-08-16T12:52:36.520 回答
0

尝试这个

    $('div.selected:not(:first):not(:last)').addClass('gored');

小提琴

于 2012-08-16T12:56:52.217 回答
0

jQuery API 文档:

如果在元素集合上调用 .index() 并传入 DOM 元素或 jQuery 对象,则 .index() 返回一个整数,指示传递的元素相对于原​​始集合的位置。

如果选择器字符串作为参数传递,.index() 返回一个整数,指示 jQuery 对象中的第一个元素相对于选择器匹配的元素的位置。如果未找到该元素,.index() 将返回 -1。

所以看来我首先误解了这两种情况下的相对性,所以我认为“选择器匹配的元素”可以替换为选择(jQuery对象)。

答案是 .index() 的工作方式与我预期的不同。

于 2013-01-17T14:24:15.163 回答