Nếu tôi đã điều sau đây:Sử dụng 'bắt đầu với' selector trên tên lớp cá nhân
<div class="apple-monkey"></div>
<div class="apple-horse"></div>
<div class="cow-apple-brick"></div>
tôi có thể sử dụng bộ chọn sau đây để tìm hai DIV đầu tiên:
$("div[class^='apple-']")
Tuy nhiên, nếu tôi có điều này:
<div class="some-other-class apple-monkey"></div>
<div class="apple-horse"></div>
<div class="cow-apple-brick"></div>
Nó sẽ chỉ tìm DIV thứ hai, vì lớp div đầu tiên được trả về dưới dạng chuỗi (tôi nghĩ) và không thực sự bắt đầu với 'apple-' mà là 'some-'
Một con đường xung quanh đó là không sử dụng bắt đầu với, nhưng thay vì chứa:
$("div[class*='apple-']")
Vấn đề với đó là nó cũng sẽ lựa chọn thứ 3 DIV trong ví dụ của tôi.
Câu hỏi: Thông qua jQuery, cách thích hợp để sử dụng bộ chọn biến vị ngữ trên tên lớp riêng lẻ, thay vì toàn bộ thuộc tính lớp như là một chuỗi là gì? Là nó chỉ là vấn đề lấy CLASS, sau đó tách nó thành một mảng và sau đó looping qua từng cá nhân với regex? Hoặc là có một giải pháp thanh lịch hơn/ít tiết?
+1. Mặc dù tôi đồng ý với gợi ý @parrots rằng "quả táo" nên là lớp riêng của nó ở đây, vì nó rõ ràng chồng chéo nhiều div nhưng là một thực thể riêng biệt. Nhưng điều này không giải quyết được vấn đề. – jvenema
Hmm ... thông minh! Tôi đã không nghĩ đến việc sử dụng không gian trong đó. Có thể sử dụng toán tử boolean trong bộ chọn jquery không? Lý tưởng nhất, ở trên sẽ là 'OR' để tránh trường hợp (hiếm và có thể tránh được) khi có nhiều hơn một lớp nhìn chằm chằm với 'apple-' –
Không chắc tôi hiểu, nhưng nếu bạn chỉ muốn sử dụng công cụ chọn thứ hai khi selector đầu tiên trả về các phần tử zero, bạn có thể làm một cái gì đó như thế này: 'var divs = $ (" div [class^= 'apple-'] "); if (divs.length == 0) divs = $ ("div [class * = 'apple -']"); ' –