2012-08-16 54 views
0

預期的結果是在第一個和最後一個選定的div之間獲得紅色的所有特殊div。變量中的jquery選擇在.index()方法中不起作用

這工作,但想不出更好的書面?:

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

回答

0

jQuery的API文檔:

如果的.index()被調用上的元件的集合和一個DOM元素或 jQuery對象中傳遞,的.index()返回一個整數,指示傳入元素相對於原​​始集合的位置。

如果選擇器字符串作爲參數傳遞,.index()會返回一個整數,指示jQuery 對象中第一個元素相對於選擇器匹配的元素的位置。如果未找到 元素,則.index()將返回-1。

所以我似乎首先誤解了兩種情況下的相對性,所以我認爲「選擇器匹配的元素」可以被選擇(jQuery對象)所取代。

答案是.index()的工作方式超出了我的預期。

1

很難正是你想要的說沒有看到HTML

請澄清,如果我有這個毛病,但它看起來好像你想添加類goreddiv.selected內的所有.speial;

在這種情況下,這是比較容易:

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

正如我所說的,這可能是錯誤的,請隨時正是你用簡單的英語(最好用HTML代碼段)想要什麼澄清

+0

我只能在閱讀你的答案後才能理解這個問題,現在它是有道理的。 +1 – 2012-08-16 12:54:10

+0

在HTML中,div和其他標籤的結構非常複雜,可以動態更改,但我可以澄清,只有.speial也可以被選中。所以選擇的是從.speial中選擇。我的目標是在第一個和最後一個.speial.selected divs之間收集所有.speial。我希望你現在瞭解我:) – Luckylooke 2012-08-27 18:31:51

0

嘗試使用CSS:第一,兒童和:最後一子選擇

+0

$('div.selected:not(:first-child):not(:last-child)')。addClass(「gored」);這對我有用! – 2012-08-16 12:59:41

+0

。選擇從.speial選擇。我的目標是在第一個和最後一個.speial.selected divs之間收集所有.speial。我希望你現在能夠理解我:) – Luckylooke 2012-08-27 18:34:02

+0

準確地說,.gial是所有.speial(WITHOUT .selected)之間的第一個和最後一個.speial.selected? – 2012-08-28 13:37:31

0

試試這個

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

參見fiddle

+0

。選中選擇.speial。我的目標是在第一個和最後一個.speial.selected divs之間收集所有.speial。我希望你現在瞭解我:) – Luckylooke 2012-08-27 18:33:43

+0

你檢查了小提琴嗎?你會如何改變它? – hsalama 2012-08-27 19:29:40

+0

我已經編輯小提琴:[here](http://jsfiddle.net/luckylooke/dbrAY/) – Luckylooke 2012-08-29 12:52:12