2009-10-05 59 views
3
$.prev("div.a").find('.b'). 

$.prev("div.a .b"). 

一個作品,另一個沒有作品。有什麼不同?爲什麼這些jQuery選擇器中的一個工作而另一個不工作?

+1

你的html看起來像什麼? – 2009-10-05 22:31:03

+3

_其中one_作品? – NVRAM 2009-10-05 22:46:36

+1

我懷疑你是在調用'$ .prev' - 更可能是'$(this).prev'或者其他什麼東西? '$ .prev'不是一個函數。 – gnarf 2009-10-05 22:49:44

回答

5

好了,選擇的作品,它只是不給你想要的東西:

根據jQuery Docs.prev([expr])

獲取一組包含各自的 匹配元素集合中的 獨特以前兄弟姐妹元件。使用 可選表達式來篩選 匹配集。只返回前一個兄弟姐妹 ,而不是全部 以前的兄弟姐妹。

這意味着:$(elem).prev("div.a").find('.b')正在尋找在DOM樹的任何一個同級這是一個div.a,並返回第一個 - 然後使用.find().b

而該元素中搜索:$(elem).prev("div.a .b")正在尋找任何以前的兄弟姐妹是div.a .b並返回第一個。

它們不等價,因此返回不同的結果。

0

find()不搜索所選元素,只搜索它們的後代......所以如果.b類位於div.a元素上,您將無法找到它。

查找就會發現:

<div class="a"> 
    <div class="b"> 

但不是:

<div class="a b"> 

更多: http://docs.jquery.com/Traversing/find

+0

@stuart:是的 - @toby:你可能錯過了第二個例子中的空間。 – nickf 2009-10-05 22:50:45

+0

你可以做$('div [class = a] [class = b]') – 2009-10-05 22:57:17

+1

@Vince:不需要使用屬性選擇器,'$('div.a.b')'會做的伎倆 – dcharles 2009-10-05 23:03:24

相關問題