views:

93

answers:

1

For context, this is a followup to an earlier question. Rather than digging through cssRules, I'd like to base the logic on jQuery selectors that search for the effects of those rules.

Given default properties of

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

that are selectively modified as in

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

how can I select pseudo-elements whose respective background positions have default values? Copying the selector as in

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

matches nothing. Trying .siblings() with

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

produces only none values.

For full details, see the live page. Is this possible?

+1  A: 

You can't use the :before and :after psuedo classes like this. The purpose of them is to insert content before and after (respectively) the selector you have specified.

Example usage:

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;
}

Result:

http://jsfiddle.net/mzcp6/

What happened was that the text |Inserted using :before| was inserted before (well, really, prepended into) the inner span because it was class b and a descendant of an element of class a. Basically, :before and :after don't select; they modify.

Example:

This doesn't work as expected:

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;
}

Nothing happens:

http://jsfiddle.net/bQ2ty/

EDIT:

:before is not a valid jQuery selector: http://api.jquery.com/category/selectors/

I think you will need to use something other than :before or attempt to extract the original rule using the jQuery plugin: http://flesler.blogspot.com/2007/11/jqueryrule.html

SimpleCoder
I think it'll also be good to note that the content generated by `:before` and `:after` do not actually show up in the DOM (because they are purely presentational), thus, there really is no way to select them with jQuery.
Yi Jiang
@Yi Jiang - Precisely; I noticed that too but failed to mention it. Thank you.
SimpleCoder