De este answer es posible que pueda obtener lo que está buscando al pasar por la propiedad cssRules.
var myElement = $("#content");
for (var x = 0; x < document.styleSheets.length; x++) {
var rules = document.styleSheets[x].cssRules;
for (var i = 0; i < rules.length; i++) {
if (myElement.is(rules[i].selectorText)) {
$("ul").append("<li>" + rules[i].selectorText + "</li>");
}
}
}
Dada la siguiente dom:
<div>
<div id="content">
</div>
</div>
y CSS reglas:
div
{
background-color:black;
}
#content{
height:50px;
width:50px;
}
div > div
{
border: solid 1px red;
}
nos encontraremos con un conjunto de reglas emparejado de:
body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form,fieldset, input, textarea, p,
blockquote, th, td div
#content
div > div
Ejemplo de jsfiddle. No estoy seguro de qué tan bien funcionará para todos los escenarios, pero podría ser algo que ver si se ajusta a sus necesidades.
Actualizado con un poco más completa example ...
$(document).click(function(event) {
var rules = GetAppliedCssRules($(event.target));
var $ul = $("#rules").empty();
$.each(rules, function() {
$ul.append("<li>" + this + "</li>");
});
event.preventDefault();
});
function GetAppliedCssRules($element) {
var appliedRules = [];
for (var x = 0; x < document.styleSheets.length; x++) {
var rules = document.styleSheets[x].cssRules;
for (var i = 0; i < rules.length; i++) {
if ($element.is(rules[i].selectorText)) {
appliedRules.push(rules[i].selectorText);
}
}
}
return appliedRules;
}
Esto suena más razonable ... no sé si es posible el uso de JS/jQuery solos sin embargo. – BoltClock
¿Qué pasa con [su otra pregunta] (http://stackoverflow.com/questions/5135287)? ¿Sigue siendo relevante? – Gumbo
Parece que está intentando encontrar los estilos calculados del elemento, no sus "selectores definidos". –