变量中的jquery选择器在.index()方法中不起作用

时间:2012-08-16 12:46:23

标签: jquery variables indexing

预期的结果是在第一个和最后一个选定的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');
}

但它不起作用......我对其原因感兴趣。 或者是否有更好的方法可以达到相同的效果?

编辑:我已经成功解决了问题:) fiddle

4 个答案:

答案 0 :(得分:1)

如果没有看到HTML

,很难准确说出你想要的东西

请澄清我是否错了,但似乎您想将gored课程添加到.speial内的所有div.selected;

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

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

正如我所说,这可能是错误的,请随意用简单的英语(最好是HTML代码段)明确说明你想要的内容

答案 1 :(得分:0)

尝试使用CSS:first-child和:last-child selectors

答案 2 :(得分:0)

试试这个

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

请参阅fiddle

答案 3 :(得分:0)

jQuery API doc:

  

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

     

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

所以我似乎首先误解了两种情况下的相对性,所以我认为“选择器匹配的元素”可以被选择(jQuery对象)取代。

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