نحوه کار با انتخابکنندههای CSS در Python
موتور انتخابگر در Aspose.HTML FOSS برای Python کلاس، شناسه، نوع، ویژگی و انتخابگرهای شبهکلاس را با ویژگیهای استاندارد ارزیابی میکند. این راهنما مطابقت انتخابگرها را از طریق سلسلهمراتبی نشان میدهد — همان موتوری که select() و element_matches() را قدرت میدهد — با استفاده از pip برای نصب.
راهنمای گام به گام
مرحله ۱: نصب بسته
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .مرحله ۲: وارد کردن کلاسهای مورد نیاز
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetمرحله ۳: ایجاد عنصری که با چندین انتخابگر مطابقت دارد
یک عنصر که هم کلاس و هم شناسه دارد، بهصورت همزمان توسط انتخابگرهای .foo، #bar و div مطابقت داده میشود:
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)مرحله ۴: بگذارید Specificity تصمیم بگیرد
قواعد رقابتی را اعمال کنید — وزن (1,0,0) انتخابگر ID بر وزن (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"))مرحله ۵: بازنویسی با یک اعلان درونخطی
اعلانهای درونخطی وزن (1,0,0) سطح درونخطی دارند و بر قوانین نویسنده با هر وزن انتخابگر پیشی میگیرند:
inline = el.style
inline.set_property("color", "green")
print(el.get_computed_style().get_property_value("color"))مسائل متداول و راهحلها
یک سلکتور که بهنظر درست میآید هیچچیزی را مطابقت نمیدهد. متن سلکتور که دارای خطاهای نحوی است، تجزیه نمیشود — موتور آن را گزارش میدهد به جای حدس زدن؛ رشتهٔ سلکتور را بررسی کنید.
:where() بهطور متفاوتی نسبت به :is(). این بهصورت عمدی است: :where() صفر اختصاصیّت میافزاید، :is() اختصاصیّت آرگومان خود را میافزاید.
یک سلکتور نوع بهصورت غیرمنتظرهای باخت. سلکتورهای نوع کمترین کلاس اختصاصیّت (0,0,1) را دارند؛ هر قانون کلاس یا آیدی روی همان عنصر، آنها را پیشی میگیرد.
سوالات متداول
آیا میتوانم یک پرسوجو selector را بدون stylesheet اجرا کنم؟
بله — select() یک selector را مستقیماً مقابل یک درخت ارزیابی میکند و element_matches() یک عنصر واحد را تست میکند.
چگونه specificity محاسبه میشود؟
specificity() یک تاپل استاندارد (id, class, type) را برمیگرداند که هم در پرسوجوها و هم در cascade استفاده میشود.
کدام pseudo-classها مدلسازی شدهاند؟
فرمهای ساختاری برای :is()، :where()، :has() و :not() با آرگومانهای پیچیده، و انتخابگرهای ساختاری به سبک nth-child وجود دارند.