Skip to content

Support <selectedcontent> in <select multiple>#12430

Open
josepharhar wants to merge 25 commits into
whatwg:mainfrom
josepharhar:selectedcontentmultiple
Open

Support <selectedcontent> in <select multiple>#12430
josepharhar wants to merge 25 commits into
whatwg:mainfrom
josepharhar:selectedcontentmultiple

Conversation

@josepharhar
Copy link
Copy Markdown
Contributor

@josepharhar josepharhar commented May 8, 2026

This PR adds support for using the selectedcontent element in a select
element with the multiple attribute by cloning each of the option
elements into the selectedcontent element.

Each cloned option will be wrapped by a generated div element inside the
selectedcontent element, so the resulting DOM would look like this:

<select multiple size=1>
  <selectedcontent>
    <div>one</div>
    <div>two</div>
  </selectedcontent>
  <option selected>one</option>
  <option selected>two</option>
  <option>three</option>
</select>

Fixes #12342

(See WHATWG Working Mode: Changes for more details.)


/form-elements.html ( diff )

This PR improves the "clear a select's non-primary selectedcontent
elements" algorithm by making it create a list of selectedcontent
elements to modify separately from modifying them in order to prevent
the list of elements to change while iterating.

Fixes whatwg#11880
This PR makes sure that the contents of the selectedcontent element stay
up to date when the selected option is changed in the selectedness
setting algorithm.

This issue was found here:
web-platform-tests/wpt#55849 (comment)
In order to make the selectedness setting algorithm match
implementations, this PR makes the selectedness setting algorithm avoid
changing the selectedness of option elements which haven't ran their
insertion steps yet by checking whether the options have their cached
nearest ancestor select element assigned yet or not.

This was discussed here: whatwg#11825
…contentredo

Merged the PRs, now I need to do the selectedcontent rewrite to clone
into all descendant selectedcontent elements.
This PR adds support for using the selectedcontent element in a select
element with the multiple attribute by cloning each of the option
elements into the selectedcontent element.

Each cloned option will be wrapped by a generated div element inside the
selectedcontent element, so the resulting DOM would look like this:

```html
<select multiple size=1>
  <selectedcontent>
    <div>one</div>
    <div>two</div>
  </selectedcontent>
  <option selected>one</option>
  <option selected>two</option>
  <option>three</option>
</select>
```

Fixes whatwg#12342
@josepharhar
Copy link
Copy Markdown
Contributor Author

This PR is currently based on the other PR to rewrite a bunch of selectedcontent stuff, and therefore includes all of its contents: #12263

When that PR is merged, the diff of this one should be easier to read.

Here is a diff which shows the actual changes of this proposal by diffing the other PR with this one: https://github.com/josepharhar/html/compare/selectedcontentredo...josepharhar:html:selectedcontentmultiple?expand=1

@annevk annevk added the topic: select The <select> element label May 11, 2026
Comment thread source
Comment on lines +59533 to +59541
<li><p>If <var>option</var> is <span data-x="concept-option-selectedness">selected</span>, then
<span data-x="list append">append</span> <var>option</var> to
<var>selectedOptions</var>.</p></li>
</ol>
</li>

<li><p>If <var>select</var> has the <code data-x="attr-select-multiple">multiple</code>
attribute, then run <span>clone multiple options into a <code>selectedcontent</code></span> given
<var>selectedOptions</var> and <var>selectedcontent</var>.</p></li>
Copy link
Copy Markdown
Member

@keithamus keithamus May 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make more sense here to do something like:

  1. Let isMulitple be true if select has the multiple attribute.
  2. For each option in select's list of options.
    1. If option is not selected then continue.
    2. If isMultiple is false, run clone an option into a selectedcontent given option and selectedcontent, and return.
    3. Append option to selectedoptions given selectedOptions and selectedcontent.
  3. If selectedoptions is empty, then run clear a selectedcontent given selectedcontent.
  4. Otherwise, run clone multiple options into a selectedcontent given selectedOptions and selectedcontent.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

topic: select The <select> element

Development

Successfully merging this pull request may close these issues.

Selectedcontent in select multiple

3 participants