jQuery - Comment obtenir tous les styles / css (définis dans le document interne / externe) avec HTML d'un élément
Je sais que $("#divId").html()
va me donner innerHtml. J'ai aussi besoin de son style (ce qui pourrait être défini par le biais de classes), soit en ligne style
attribut ou tous les styles/classes au sein d'un distinct <style>
tag.
Est-il possible?
Mise à JOUR
Que faire si le html est comme <div id="testDiv">cfwcvb</div>
et une classe css pour #testDiv
est défini dans la feuille de style externe?
Mise à JOUR 2
Désolé de ne pas clarifier cette plus tôt
Si c'est mon code HTML
<div id="divId">
<span class="someClass">Some innerText</span>
</div>
Et les styles sont définis dans la feuille de style séparée ou dans la tête les styles.
#divId {
clear: both;
padding: 3px;
border: 2px dotted #CCC;
font-size: 107%;
line-height: 130%;
width: 660px;
}
.someClass {
color: blue;
}
Puis, quand j'essaie d'obtenir intérieure html de $("#divId").html()
ou appeler une autre fonction personnalisée, j'ai besoin de quelque chose comme ci-dessous
<style>
#divId {
clear: both;
padding: 3px;
border: 2px dotted #CCC;
font-size: 107%;
line-height: 130%;
width: 660px;
}
.someClass {
color: blue;
}
</style>
<div id="divId">
<span class="someClass">Some innerText</span>
</div>
Mise à JOUR 3 pour Répondre par kirilloid
J'ai couru code ci-dessous dans la Fenêtre de Commande de Chrome Débogueur outils pour cette page elle-même et c'est ce que je vois TypeError: Cannot read property 'rules' of undefined
function getElementChildrenAndStyles(selector) {
var html = $(selector).get(0).outerHTML;
selector = selector.split(",").map(function(subselector){
return subselector + "," + subselector + " *";
}).join(",");
elts = $(selector);
var rulesUsed = [];
//main part: walking through all declared style rules
//and checking, whether it is applied to some element
sheets = document.styleSheets;
for(var c = 0; c < sheets.length; c++) {
var rules = sheets[i].rules || sheets[i].cssRules;
for(var r = 0; r < rules.length; r++) {
var selectorText = rules[r].selectorText;
var matchedElts = $(selectorText);
for (var i = 0; i < elts.length; i++) {
if (matchedElts.index(elts[i]) != -1) {
rulesUsed.push(CSSrule); break;
}
}
}
}
var style = rulesUsed.map(function(cssRule){
if ($.browser.msie) {
var cssText = cssRule.style.cssText.toLowerCase();
} else {
var cssText = cssRule.cssText;
}
//some beautifying of css
return cssText.replace(/(\{|;)\s+/g, "\$1\n ").replace(/\A\s+}/, "}");
// set indent for css here ^
}).join("\n");
return "<style>\n" + style + "\n</style>\n\n" + html;
};
getElementChildrenAndStyles(".post-text:first");
source d'informationauteur IsmailS
Vous devez vous connecter pour publier un commentaire.
outerHTML (pas sûr, vous en avez besoin — juste au cas où)
Limitations: CSSOM est utilisé et les feuilles de style doivent être de la même origine.
utilisation:
Pas de jQuery et pas d'IE de soutien, c'est tout ce que je peux faire:
Vous pouvez obtenir un style d'objet représentant le calcul de style d'un élément à l'aide de
window.getComputedStyle()
dans la plupart des navigateurs et de l'élémentcurrentStyle
propriété dans IE. Il y a plusieurs différences de navigateurs, cependant, avec des valeurs retournées pour les propriétés de raccourci (commebackground
), RVB de la couleur de valeurs, de longueur et de mêmefont-weight
(voir ce test utile de page). Test avec soin.Vous pouvez utiliser quelque chose comme cela pour le script:-
et html simple serait comme cette
si vous souhaitez enregistrer tous les style d'un élément, je pense que ce sera plus compliqué que vous le pensez
tout d'abord mon premier ide a été firebug css de la console. cela montre toutes les fo le style d'un élément et j'ai pensé comment?
j'ai donc cherché pour le code source de la firebug et j'ai trouvé ceci:
http://fbug.googlecode.com/svn/branches/firebug1.7/content/firebug/css.js
ce code en travaillant uniquement sur le css de la partie.
la fonction qui récupère tous les styles.
dans ce code, j'ai compris que le
pour obtenir tous les styles d'un élément, puis avec une boucle for obtient tous les style et les imprime. je pense donc que le getComputedSTyle est la principale fonction de l'utilisation, et après cela, vous pouvez obtenir les accessoires, un par un avec:
Basé sur kirilloid réponse, j'ai créé un développeur d'outils d'extension pour Chrome qui intègre qui code pour la capture de styles et de balisage d'un fragment de page. L'extension est dans la Chrome Web Store et est sur Github. Tous les Auteur de "Styles" options de sortie utilisation de cette méthode pour itérer sur les feuilles de style.
L' .css() méthode permet d'obtenir un style particulier de l'élément... je ne sais pas si vous pouvez récupérer tous les styles:
http://api.jquery.com/css/
En général, vous pouvez accéder paramètre de style à l'aide .attr('style'). Si vous souhaitez accéder calculé le style, vous pouvez utiliser la fenêtre.getComputedStyle(élément) dans Opera, Firefox, Chrome et d'autres sane navigateurs. Pour IE vous feriez la même chose avec l'élément.currentStyle.
Aussi, si vous souhaitez accéder individuelle de style CSS, vous pouvez le faire avec jQuery .css méthode. Comme $("#divId").css('font-size').
Vous pouvez obtenir la feuille de style définie à l'intérieur de balises de style sous document.les feuilles de style. Vous pouvez lire les règles dans une carte, et de les trouver par selectorText. Par id: "#id", par classes: ".className". Par safari ou chrome, vous pouvez utiliser getMatchedCSSRules.