The DOM structure of the Select2 widget is not “officially” documented, but you can easily inspect it with your browser’s Inspect command. I believe you want to colorize the following element: <span class="select2-selection select2-selection--single" role="combobox" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-disabled="false" aria-labelledby="select2-nd3r-container" style=" background-color: red; ">
To know when a selection has been made (or cleared, if you allow that), listen for the select2:select and select2:clear events. You can set the event listeners on your individual <select> elements, or you can set a single event listener on a common ancestor that will handle all of the events from all of your Select2’s. These events contain a params field, which contains a data field, and that field contains an element property, which is a reference to the underlying HTML <select> for the Select2 that triggered the event. In the DOM, the Select2 for each <select> is rendered immediately after that <select> (in other words, the Select2 widget is the nextElementSibling of the <select>. You can use this information to target the <span> shown above for the Select2 that triggered the event and change its background color, either by adding/removing a class, or managing the background color via the <span>'s style attribute.
Here’s an example of the event.params object:
{
"originalEvent":"[$.Event]",
"data": {
"selected":true,
"disabled":false,
"text":"California",
"id":"CA",
"title":"",
"_resultId":"select2-7fje-result-j3q8-CA",
"element":"[DOM node]"
},
"_type":"select"
}
For instance, a listener like this should do what you want:
function colorizeSelect2(event) {
const targetSelect = event.params.data.element;
const targetSelect2 = targetSelect.nextElementSibling;
targetSelect2.querySelector('span.select2-selection').style.backgroundColor =
event.type === 'select2:select' ? "#fff" : "#f00";
}
If you set this function as the event handler for select2:select and select2:clear events (you could even set it on the <body> or some other common ancestor element of all the Select2’s), it should correctly identify and colorize just the Select2 where the selection was made.
Good luck, and I hope this helps.