2012-05-27 26 views
9

Tôi đã thử tất cả mọi thứ nhưng tôi nghĩ rằng tôi đang trở nên quá phức tạp và thậm chí còn quản lý để có được chrome để treo với bộ chọn của tôi. Tôi chắc chắn theres một cách đơn giản để làm điều nàyBộ chọn CSS có lớp a nhưng không phải lớp b

Chọn classa nhưng chỉ khi theres không có classb và bỏ qua những ví dụ cuối cùng của nó

<div class="container"> 
    <div class="classa classb"></div> <!-- Dont Select --> 
    <div class="classa"></div> <!-- Select --> 
    <div class="classa"></div> <!-- Dont select last instance --> 
</div> 

Trả lời

12

Tôi tin rằng bạn có thể làm điều này với CSS3 sử dụng :not() chọn (ví dụ here)

div.classa:not(.classb):not(:last-child) {}

Tuy nhiên, như bạn đã biết, không có nhiều trình duyệt hỗ trợ này, vì vậy Javascript có thể là một cách dễ dàng hơn ..

+0

Ngoài ra, bạn sẽ không thể loại trừ '.classa' cuối cùng nếu nó không phải là đứa con cuối cùng. Xem http://stackoverflow.com/questions/10230416/is-it-possible-using-current-browsers-to-use-pseudo-classes-to-detect-first-and/10230466#10230466 – BoltClock

+0

Có vấn đề này tôi đã được thử nghiệm – Akshat

2
.classa:not(.classb):not(:last-child) { 
    /* rules */ 
} 

Thử nghiệm trên Firefox 12, Chrome 19, Safari 5 và Opera 10. Thật không may nó không hoạt động (... đoán ai?) IE.

+0

Vì bạn chưa nâng cấp trình duyệt IE của mình. – BoltClock

+0

Tôi đã thử nghiệm trên IE 9 - không hoạt động. Ngay cả khi nó hoạt động, hầu hết mọi người vẫn sử dụng các phiên bản cũ hơn ... – Simone

+0

Đảm bảo bạn đang thử nghiệm ở chế độ tiêu chuẩn. IE9 hỗ trợ đầy đủ các bộ chọn, nhưng chỉ ở chế độ tiêu chuẩn. – BoltClock

1

Hãy thử:

.classa:not(.classb):first-child { 
    background: red; 
} 

này sẽ không làm việc trong IE 7 hoặc 8 mặc dù.

+0

Điều này là sai, bởi vì đứa con đầu tiên là một '.classa.classb'. – BoltClock

Các vấn đề liên quan