Two fixes, plus lots of little improvements:
1) Jupyter Lab 4 broke MathJax support because it ships with a nonstandard MathJax that lives in the standard MathJax namespace. I filed an issue(https://github.com/jupyterlab/jupyterlab/issues/15614) and was waiting for Jupyter Lab to provide a method to ask MathJax to rerender elements, but I don't see any evidence that is being provided. This had been previously kept in a separate branch and distributed as alpha versions, but it is time to stop waiting on Jupyter Lab and make this mainstream.
My hacky solution is to load the real MathJax on top of Jupyter Lab's non-standard one. This is dangerous and may break in the future, but it is the best solution I know for now. I wish the Jupyter Lab community would implement the feature needed to avoid this behavior, and I don't have the expertise to implement that myself. If MathJax breaks for you and you are using JupyterQuiz, please let me know, and I will see what I can do to fix it.
2) Jupyter Lab 4.2.5+ started stripping id's when rendering HTML elements in Markdown cells. I'm sure there is a reason, but this broke the way I was finding hidden spans containing JupyterQuiz questions embedded in notebooks. I think this affects a pretty small community. Since JL does not strip classes from the HTML elements, I have included a secondary search for an element with the specified class if the id search fails. You will have to update your HTML elements accordingly if you are on 4.2.5 or later versions. I have filed an issue (https://github.com/jupyterlab/jupyterlab/issues/16937) about this with Jupyter Lab, so maybe the old behavior will return.