Cách làm việc với các bộ chọn CSS trong Python

Cách làm việc với các bộ chọn CSS trong Python

Công cụ bộ chọn trong Aspose.HTML FOSS cho Python đánh giá các bộ chọn class, id, type, attribute và pseudo-class với độ đặc hiệu tiêu chuẩn. Hướng dẫn này trình bày việc khớp bộ chọn thông qua cascade — cùng công cụ được sử dụng cho select() và element_matches() — bằng cách sử dụng pip để cài đặt.

Hướng dẫn từng bước

Bước 1: Cài đặt gói

git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .

Bước 2: Nhập các lớp cần thiết

from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet

Bước 3: Tạo một phần tử mà nhiều bộ chọn khớp vào

Một phần tử mang cả class và id được các bộ chọn .foo, #bar và div khớp đồng thời:

doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)

Bước 4: Để Độ ưu tiên quyết định

Gắn các quy tắc cạnh tranh — bộ chọn ID có (1,0,0) thắng bộ chọn class có (0,1,0):

sheet = CSSStyleSheet()
sheet.replace_sync(".foo { color: red } #bar { color: blue }")
doc.attach_style_sheet(sheet)
print(el.get_computed_style().get_property_value("color"))

Bước 5: Ghi đè bằng khai báo nội tuyến

Các khai báo nội tuyến có mức ưu tiên (1,0,0) ở cấp độ nội tuyến và vượt qua các quy tắc của tác giả bất kể độ ưu tiên của bộ chọn:

inline = el.style
inline.set_property("color", "green")
print(el.get_computed_style().get_property_value("color"))

Các vấn đề phổ biến và cách khắc phục

Một bộ chọn trông đúng nhưng không khớp gì. Văn bản bộ chọn có lỗi cú pháp không thể phân tích — engine báo lỗi thay vì đoán; hãy kiểm tra chuỗi bộ chọn.

:where() có hành vi khác so với :is(). Đó là do thiết kế: :where() đóng góp độ đặc thù bằng 0, :is() đóng góp độ đặc thù của đối số.

Một bộ chọn kiểu bất ngờ bị thua. Các bộ chọn kiểu có lớp độ đặc thù thấp nhất (0,0,1); bất kỳ quy tắc class hoặc id nào trên cùng một phần tử đều vượt lên trên chúng.

Câu hỏi thường gặp

Tôi có thể chạy truy vấn bộ chọn mà không có stylesheet không?

Có — select() đánh giá một bộ chọn trực tiếp trên cây, và element_matches() kiểm tra một phần tử duy nhất.

Độ đặc hiệu được tính như thế nào?

specificity() trả về bộ ba tiêu chuẩn (id, class, type) được cả truy vấn và cascade sử dụng.

Các pseudo-class nào được mô hình hoá?

Các mẫu có cấu trúc tồn tại cho :is(), :where(), :has(), :not() với các đối số phức tạp và các bộ chọn cấu trúc kiểu nth-child.

Xem thêm

 Tiếng Việt