Могу ли я использовать селекторный движок, такой как sizzle, для сравнения селекторов css?

Вот моя проблема: я пишу плагин для WordPress, который помогает начинающим авторам CSS видеть, как CSS применяется к их теме в режиме реального времени. У него есть ряд отличных функций, кроме одной, которая, на мой взгляд, очень важна.

Я хочу позволить им щелкнуть элемент, увидеть полный путь селектора к этому элементу (эта часть выполнена), а затем показать им, какие стили в их таблице стилей применяются к нему.

У меня есть полный путь селектора к элементу (например, html body div#page div#post-18.post h2.posttitle), и у меня есть их таблица стилей, разобранная на отдельные селекторы, но я не могу понять, как это сделать. сравните два. Некоторые идеи, которые у меня были:

  1. Используйте jQuery и запустите каждый селектор (в таблице стилей), чтобы посмотреть, что он возвращает. Я не в восторге от этого, потому что кажется, что проверка (возможно, тысяч) селекторов на полный ДОМ. Вдобавок ко всему, мне нужно сравнить объекты jQuery, чтобы увидеть, указывают ли они на одно и то же, и, основываясь на том, что я прочитал о сравнении объектов, я не уверен, что это будет прогулка. парк.

  2. Напишите свою собственную простую функцию сравнения и сравните полный путь селектора с селектором CSS. Я был очень увлечен этим, пока не начал думать о различных расширенных селекторах — : > и т. д.

  3. Используйте sizzle (или что-то подобное) или каким-то образом используйте реализацию sizzle в jQuery, чтобы просто сравнить селекторы. Они запускают эти селекторы в DOM, так что наверняка у них есть возможность просто сравнивать строки селекторов? Как-то?

Я застрял. Любая помощь приветствуется.


person Peter    schedule 29.10.2010    source источник


Ответы (1)


Проверка на равенство в этих сложных структурах (таких как CSS) чрезвычайно сложна (например, вы не можете определить это, проверяя одинаковые наборы результатов, поскольку они могут вести себя совершенно по-разному при других обстоятельствах). Возможно, вы сможете понять это, используя API-интерфейсы для конкретных браузеров, если они доступны в JavaScript (например, Firebug отображает таблицы стилей, влияющие на выбранные элементы). Кроме этого, ваш первый подход является единственно возможным, насколько мне известно.

person jwueller    schedule 29.10.2010