2011-06-08 109 views
-1

下面的三個jQuery選擇器都有相同的結果。有什麼不同?

<!DOCTYPE html> 
<html> 
<head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 
<body> 
    <p><span>Hello</span>, how are you?</p> 
<p>Me? I'm <span>good</span>.</p> 
<script> 
    $('p > span').css('color','red'); 
OR 
    $('span', 'p').css('color','red'); 
OR 
    $('p span').css('color','red'); 
</script> 

</body> 
</html> 

回答

3

$('span', 'p')$('p span')是相同的,兩者都將選擇任何p元素的後代不管深度任何跨度元件。

$('p > span')另一方面將選擇p元素的直接子元素的跨度元素。因此,例如,這個選擇將在下面的例子中選擇span元素:

<p> 
    <a href="#"> 
     <span>Test</span> 
    </a> 
</p> 

..whereas其他兩個會選擇它就好了。

2

區別在於p > span只有在跨度是段落的直接後綴時才匹配。

鑑於這種標記:

<p><div><span>Hello</span>, how are you?</div></p> 
<p>Me? I'm <span>good</span>.</p> 

選擇p > span只會在第二段匹配的跨度。

1

首先是child-selector

二是multiple-selector

三是descendant-selector

所有環節都jQuery的API

+0

沒有,第二個是不是一個多重選擇器,它的兩個選擇,其中第二個用作第一個上下文。一個多重選擇器可能是'$('span,p')',這當然不會給出與其他結果相同的結果。 – Guffa 2011-06-08 07:51:29

相關問題