2012-04-19 16 views
16

Mam następującą strukturę HTML:Wybierz konkretny element przed inny element

<div> 
    <h2>Candy jelly-o jelly beans gummies lollipop</h2> 
    <p> 
    Cupcake ipsum dolor sit amet. Sugar plum liquorice dragée oat cake cupcake. 
    </p> 
    <p> 
    Candy tiramisu bonbon toffee. Croissant pudding ice cream soufflé pastry toffee chocolate bar. Tiramisu wypas tootsie roll icing fruitcake oat cake icing soufflé tiramisu. 
    </p> 
    <h2>Dessert pie cake</h2> 
    <ul> 
    <li>liquorice</li> 
    <li>powder</li> 
    <li>dessert</li> 
    </ul> 
    <h2>Chupa chups sweet dragée</h2> 
    <p> 
    Chocolate cake biscuit pie jelly-o chocolate bar. Marshmallow topping sugar plum apple pie brownie cotton candy dragée lemon drops. Soufflé cake toffee. 
    </p> 
</div> 

chciałbym wybrać tylko ten h2 która jest bezpośrednio przed ul. Jak mogę to zrobić? W mojej zawartości jest wiele więcej uls i wiele więcej h2s, więc rozwiązanie powinno być uniwersalne.

Odpowiedz

14

O ile mi wiadomo, CSS nie oferuje żadnych selectors które będą kierować przed selektor. Czy możesz wybrać go jako h2, który jest bezpośrednio po p (p + h2)?

h2 { 
    color: #1a1a1a; 
} 

p + h2 { 
    color: #0cc; 
} 

Example on JSFiddle

Jak widać, jest to prawdopodobnie najlepszy selektor można użyć, jeśli jesteś polegając na CSS, chociaż można łatwo wystarczy dodać klasę do każdej h2 który jest przed ul . Uniknęłoby to przypadku, gdy masz sekcję akapitu przed inną h2 i sekcją akapitów.

Można to zrobić przy użyciu jQuery:

.highlight { 
    color: #0cc; 
} 

$('ul').prev('h2').addClass('highlight') 

Example on JSFiddle

Wybiera każdy ul, następnie wybiera h2 który jest przed nim, zanim w końcu dodając klasę .highlight do niego.

+1

Dzięki za odpowiedź. Wiedziałem o rozwiązaniu jQuery, ale zastanawiałem się, czy można to zrobić w czystym CSS. – user1292810

+2

Próbuję wybrać pierwszą kotwicę przed moim linkiem do usunięcia, i nie mogę utworzyć linku "a" wewnątrz iinnego linku "a", tak jak ten 'file.exe' jedynymi rozwiązaniami rozwiązania są z JQuery, –

-3

Hej Myślę, że chcesz tak jak ten

Css

div h2{ 
font-weight:bold; 
    color:red; 
} 



ul ~ h2{ 
color:green; 
} 

żywo demo http://jsfiddle.net/rohitazad/JxST8/4/

+3

To styl "h2", który jest _ po "ul", a nie przed nim :) – djlumley

+1

możesz stylizować h2 tak jak Ty i teraz przed ul, aby stworzyć stylizację tak prostą .......... –

+1

Jak mówi djlumley http://jsfiddle.net/JxST8/5/. – kubedan

0

Należy użyć tej

div h2::nth-child(2) { 

} 
+1

starsza przeglądarka nie wesprzyj to ... speciale alphanyx

+1

W mojej treści jest znacznie więcej 'h2s' i dużo więcej' uls', więc rozwiązanie powinno być bardziej uniwersalne. – user1292810

-3

Można użyć ogólnego rodzeństwa selektor ~.

W twoim przypadku możesz użyć numeru h2~ul, który będzie miał zastosowanie do h2 przed ul w tym samym katalogu nadrzędnym.

+4

Niestety, nie będzie. Dotyczy to wszystkich 'h2' _after_' ul' wewnątrz tego samego rodzica. – djlumley