0

这是我的问题:我正在编写一个 WordPress 插件,它可以帮助初露头角的 CSS 作者了解 CSS 如何实时应用于他们的主题。它有许多漂亮的功能,除了一个,这在我看来非常重要。

我想让他们单击一个元素,查看该元素的完整选择器路径(该部分已完成),然后向他们展示其样式表中的哪些样式适用于它。

我有元素的完整选择器路径(例如 html body div#page div#post-18.post h2.posttitle),并且我将它们的样式表解析为单独的选择器 - 但我想不出任何方法比较两者。我的一些想法:

  1. 使用 jQuery,并运行每个选择器(在样式表中)以查看它返回的内容。 我对此并不感到疯狂,因为根据完整的 DOM 检查(可能数千个)选择器似乎是一个巨大的性能拖累。最重要的是,我必须比较 jQuery 对象,看看它们是否指向同一个东西——根据我读过的关于比较对象的内容,我不确定这是否会成为公园。

  2. 编写自己的简单比较函数,并将完整的选择器路径与 css 选择器进行比较。 我对此非常满意,直到我开始考虑各种高级选择器 - : > 等。

  3. 使用 sizzle (或类似的),或者以某种方式使用 jQuery 的 sizzle 实现来比较选择器。 他们正在针对 DOM 运行这些选择器,所以他们肯定有能力只比较选择器字符串吗?不知何故?

我被困住了。任何帮助是极大的赞赏。

4

1 回答 1

2

检查复杂结构(如 CSS)中的相等性非常困难(例如,您无法通过测试相等的结果集来确定这一点,因为它们在其他情况下的行为可能完全不同)。如果它们在 JavaScript 中可用,您可能能够使用特定于浏览器的 API 来解决这个问题(例如,Firebug 显示影响所选元素的样式表)。除此之外,您的第一种方法是唯一可能的 AFAIK。

于 2010-10-29T13:20:31.763 回答