Không thể thực hiện được với CSS2.1, nhưng có thể với các bộ chọn phù hợp với chuỗi con thuộc tính CSS3 ( được hỗ trợ trong IE7 +):
div[class^="status-"], div[class*=" status-"]
Lưu ý ký tự khoảng trắng trong bộ chọn thuộc tính thứ hai. Điều này chọn div
các phần tử có class
thuộc tính đáp ứng một trong hai điều kiện sau:
[class^="status-"]
- bắt đầu bằng "trạng thái-"
[class*=" status-"]
- chứa chuỗi con "status-" xảy ra trực tiếp sau ký tự khoảng trắng. Tên lớp được phân tách bằng khoảng trắng theo thông số HTML , do đó, ký tự khoảng trắng đáng kể. Điều này kiểm tra bất kỳ lớp nào khác sau lớp đầu tiên nếu nhiều lớp được chỉ định và thêm phần thưởng kiểm tra lớp đầu tiên trong trường hợp giá trị thuộc tính được đệm không gian (có thể xảy ra với một số ứng dụng xuất ra class
thuộc tính động).
Đương nhiên, điều này cũng hoạt động trong jQuery, như đã trình bày ở đây .
Lý do bạn cần kết hợp hai bộ chọn thuộc tính như được mô tả ở trên là vì bộ chọn thuộc tính như [class*="status-"]
sẽ khớp với phần tử sau, có thể không mong muốn:
<div id='D' class='foo-class foo-status-bar bar-class'></div>
Nếu bạn có thể đảm bảo rằng một kịch bản như vậy sẽ không bao giờ xảy ra, thì bạn có thể tự do sử dụng bộ chọn như vậy vì mục đích đơn giản. Tuy nhiên, sự kết hợp ở trên mạnh mẽ hơn nhiều.
Nếu bạn có quyền kiểm soát nguồn HTML hoặc ứng dụng tạo đánh dấu, có thể đơn giản hơn là chỉ tạo status-
tiền tố status
lớp của chính nó thay vì như Gumbo gợi ý .
status-
và bạn không muốn khớp với điều đó, thì bộ chọn càng trở nên phức tạp hơn:div[class^="status-"]:not(.status-), div[class*=" status-"]:not(.status-)
Thêm vào đó bạn mất hỗ trợ IE7 / IE8. Rất may, nếu đánh dấu của bạn lành mạnh, bạn sẽ không cần loại trừ một lớp như vậy.