Hur man arbetar med CSS-väljare i Python

Hur man arbetar med CSS-väljare i Python

Selectormotorn i Aspose.HTML FOSS för Python utvärderar klass-, id-, typ-, attribut- och pseudoklassväljare med standardens specificitet. Denna guide visar hur väljarmatchning fungerar genom kaskaden — samma motor som driver select() och element_matches() — med pip för installation.

Steg-för-steg-guide

Steg 1: Installera paketet

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

Steg 2: Importera nödvändiga klasser

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

Steg 3: Skapa ett element som matchas av flera väljare

Ett element som har både en klass och ett id matchas av .foo, #bar och div selektorer samtidigt:

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

Steg 4: Låt specificiteten avgöra

Koppla konkurrerande regler — ID-selektorns (1,0,0) slår klass-selektorns (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"))

Steg 5: Åsidosätt med en inline-deklaration

Inline-deklarationer har (1,0,0) inline-nivåprioritet och slår författarregler med vilken selector-specificitet som helst:

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

Vanliga problem och lösningar

En selektor som ser korrekt ut matchar ingenting. Selektortext med syntaxfel misslyckas med att parsas — motorn rapporterar det istället för att gissa; kontrollera selektorssträngen.

:where() beter sig annorlunda än :is(). Det är avsiktligt: :where() bidrar med noll specificitet, :is() bidrar med dess argument.

En typselektor förlorar oväntat. Typselektorer har den lägsta specificitetsklassen (0,0,1); alla klass- eller id-regler på samma element har högre prioritet än dem.

Vanliga frågor

Kan jag köra en selector-fråga utan en stylesheet?

Ja — select() utvärderar en selector mot ett träd direkt, och element_matches() testar ett enskilt element.

Hur beräknas specifitet?

specificity() returnerar den standard (id, class, type)-tupeln som används av både queries och cascade.

Vilka pseudo-klasser är modellerade?

Strukturerade formulär finns för :is(), :where(), :has(), :not() med komplexa argument och nth-child-style strukturella selektorer.

Se även

 Svenska