Любое решение должно было бы сделать то, что вы уже делаете за кулисами.jQuery поддерживает изначально неподдерживаемые селекторы, разделяя их и используя каждую часть селектора для выполнения некоторого обхода DOM - он ничего не делает для того, чтобы браузер мог «понимать»: последний ребенок и т. д.
Этот обход DOM обязательно намного медленнее, чем синтаксический анализ движка CSS и применение дополнительного класса, особенно в браузерах, которые вас интересуют в этом случае.Новые браузеры будут иметь достаточно быстрые JS-движки, чтобы вы не замечали наказания во многих случаях - но эти браузеры в любом случае также поддерживают селекторы CSS3.
Другой камень преткновения заключается в том, что браузеры создаются для игнорирования (недаже попробуй разобрать) CSS правила для селекторов они не понимают.Таким образом, вы должны выполнить весь свой анализ и повторное применение, работая с таблицей стилей в виде большого куска текста - у вас не будет доступа к «нарушенным» правилам с помощью обычных механизмов.
Представьте, что у вас естьсистема, которая:
- Проверяет все ваши селекторы
- Выясняет, какие из них не могут использоваться текущим браузером
- Затем восстанавливает эти селекторы в форматбраузер может использовать
- Затем переписывает части таблицы стилей для добавления новых селекторов
- Затем применяет все необходимые хуки для HTML (возможно, добавляя классы, как вы обычно это делаете)
Это, я думаю, основа того, что вам нужно делать, что вы хотите.Это будет медленно - очень медленно - в старых браузерах.Лучше смотреть на это с точки зрения DOM - что-то для автоматического добавления классов (.last-child) и т. Д., Которые вы в настоящее время делаете вручную.