list-children-valid
Listen dürfen direkt nur Listeneinträge enthalten
Prüft, dass <ul>/<ol>-Elemente als direkte Kinder nur <li>, <script> oder <template> haben.
Anwendbarkeit. Gilt für <ul>/<ol>-Elemente, die mindestens ein direktes Kindelement oder direkt in ihnen stehenden Text haben, der nicht nur aus Leerraum besteht, und deren Rolle list ist: kein role-Attribut, ein role-Attribut, das zu list aufgelöst wird (sein erstes Token, das eine bekannte Rolle nennt, ohne Berücksichtigung der Groß-/Kleinschreibung), oder eines, das keine bekannte ARIA-Rolle nennt. Ein <ul>/<ol> mit einer anderen Rolle (listbox, menubar, tablist, none, ...) ist keine Liste; seine Kinder folgen dann den Regeln dieser Rolle.
Erwartung. Jedes direkte Kindelement ist <li>, <script> oder <template>. AUSSER es hat eine explizite Rolle (das erste Token seines role-Attributs, das eine bekannte Rolle nennt, ohne Berücksichtigung der Groß-/Kleinschreibung abgeglichen); dann hat die explizite Rolle vollständig Vorrang vor dem Tag: Ein Kind ist genau dann gültig, wenn diese Rolle "listitem" ist (<li role="presentation">/<li role="menuitem"> sind also trotz <li>-Tag ungültig, und umgekehrt ist ein Nicht-<li>-Element mit explizitem role="listitem" oder role="foo LISTITEM" gültig). Ein role-Attribut, das keine bekannte Rolle nennt, überlässt die Entscheidung dem Tag. Ein Wrapper-<div> für das Styling (ganz ohne Rolle) bricht die Listensemantik weiterhin genauso wie zuvor. Text, der direkt in der Liste steht und nicht nur aus Leerraum besteht, ist ebenfalls ein ungültiges Kind: HTML erlaubt dort nur <li> und skriptunterstützende Elemente, und der Text gehört zu keinem Listeneintrag.
Was ein Befund meldet.
reasonCode:LIST_ITEM_ROLE_OVERRIDDEN, wenn jedes Kind, das nicht dazugehört, ein <li> ist, dessen explizite Rolle listitem ersetzt (<li role="presentation">,role="none",role="group"...), undLIST_INVALID_CHILDfür jedes andere Kind: ein Element, das kein <li> ist, oder Text. Eine Liste mit beidem istLIST_INVALID_CHILD.element: der Tag-Name der Liste,uloderol.invalidChildren: die Kinder, die nicht in die Liste gehören, ein Tag-Name pro Kind (#textfür direkt darin stehenden Text).overriddenRoles: beiLIST_ITEM_ROLE_OVERRIDDENdie Rolle jedes solchen <li>, in Reihenfolge.elementist anders als der Rest vondata.detailsein stabiler Vertrag.
Diese Felder in data.details helfen, einen Befund zu lesen und zu reproduzieren. Außer reasonCode und den wenigen Feldern, die Ausgabeschema als stabil nennt, sind sie kein stabiler Vertrag: Ein Feld kann in einer Minor-Version umbenannt werden oder wegfallen, bauen Sie also nicht darauf auf.
Beispiele
<ul><li>Apple</li><li>Banana</li></ul>
Die einzigen direkten Kinder von <ul> sind <li>.
<ul><li>Elderberry</li><div>wrapper</div></ul>
Ein <div> ist neben den <li> ein direktes Kind von <ul>.