如何使用jQuery访问伪元素的样式属性?

时间:2010-09-18 21:08:24

标签: jquery css jquery-selectors pseudo-element

对于上下文,这是an earlier question的后续内容。我不想挖掘cssRules,而是将逻辑建立在搜索这些规则的效果的jQuery选择器上。

给出

的默认属性
.commentarea .author:before {
    background-image: url(http://...);
    background-position: -9999px -9999px;
    /* ... */
}

有选择地修改

.author[href$="gbacon"]:before /* ... */ {
  content: "";
  background-position: 0 -140px
}

如何选择各自背景位置具有默认值的伪元素?复制选择器,如

GM_log("size = " + $(".commentarea .author:before").size());

什么都不匹配。使用

尝试.siblings()
$(".commentarea .author")
  .map(function(i) {
         GM_log($(this)
                  .siblings()
                  .map(function (i) { return $(this).css("background-image") })
                  .get()
                  .join(", "))
       });

仅生成none个值。

有关详细信息,请参阅live page。这可能吗?

1 个答案:

答案 0 :(得分:6)

您无法使用此类:before:after伪元素。它们的目的是在您指定的选择器之前和之后插入内容。

使用示例:

HTML:

<span class='a'>
    Outer
    <span class='b'>
        Inner
    </span>
</span>

CSS:

.a .b:before {
    content: "|Inserted using :before|";
}

.a {
    color: blue;
}

.b {
    color: red;
}

<强>结果:

http://jsfiddle.net/mzcp6/

发生的事情是文本|Inserted using :before|之前(嗯,真的,预先插入)内部跨度,因为它是类b和类a元素的后代。基本上,:before:after不会选择;他们修改了。

示例:

这不能按预期工作:

HTML:

<span class='a'>
    <p>More text</p>
    <span class='b'>
        <p>More text</p>
        Inner
    </span>
</span>

CSS:

.a .b:before {
    text-size: 100px;
}

什么都没发生:

http://jsfiddle.net/bQ2ty/

修改

:before不是有效的jQuery选择器:http://api.jquery.com/category/selectors/

我认为您需要使用:before之外的其他内容或尝试使用jQuery插件提取原始规则:http://flesler.blogspot.com/2007/11/jqueryrule.html