Comment puis-je définir plusieurs styles CSS en JavaScript?
J'ai le code JavaScript suivant variables:
var fontsize = "12px"
var left= "200px"
var top= "100px"
Je sais que je peux le mettre dans mon élément de manière itérative comme ceci:
document.getElementById("myElement").style.top=top
document.getElementById("myElement").style.left=left
Est-il possible de les mettre tous ensemble à la fois, quelque chose comme ça?
document.getElementById("myElement").style = allMyStyle
- Ce serait
allMyStyle
être dans votre exemple? Au début, vous avez une liste de variables simples... - font-size:12px; left:200px; top:100px
- Si ce serait le travail,ce serait une chaîne de caractères contenant tous les CSS pour définir: document.getElementById("myElement").style = font-size:12px; left:200px; top:100px
- Jetez un oeil à ma réponse.... vous pouvez utiliser
cssText
. - Kling c'est ce que je suis à la recherche d'. Ne pas faire beaucoup de re-flux et repeint. Je ne suis pas sûr si cela ne fonctionne pas avec mon code, mais ce doit être cela! Merci
- Fait intéressant cependant, il semble que l'application de plusieurs règles css dans une séquence, par opposition à l'aide de la cssText méthode est plus rapide: jsperf.com/csstext-vs-multiple-css-rules/4
Vous devez vous connecter pour publier un commentaire.
Si vous avez le CSS valeurs en tant que chaîne et il n'y a pas d'autre CSS déjà défini pour l'élément (ou vous ne se soucient pas de les écraser), faire usage de la
cssText
de la propriété:Ce qui est bon dans un sens qu'il évite de repeindre l'élément chaque fois que vous modifiez une propriété (à vous de les changer tous les "à la fois" en quelque sorte).
De l'autre côté, vous devez construire la chaîne.
display: block; position: absolute;
.elem.style.width = '300px';
) était de près d'un ordre de grandeur plus rapide de chaque alternative. Si des solutions de rechange ont été de 90% plus lent, et ils étaient tous de donner ou de prendre tout aussi lent.document.createElement()
et 10+ règles de style de jeu, il est préférable d'avoir 10+ distincte.style.
de lignes que d'une ligne à l'aide decssText
?document.querySelector('html').style = Object.assign({}, document.querySelector('html').style, { color: 'red'})
mais rien ne se passe.style
ne semble pas fonctionner (ce qui est logique puisquestyle
lui-même est une sorte de magique). L'attribution de propriétés de il fonctionne bien:Object.assign(document.querySelector('html').style, { color: 'red'})
, jsfiddle.net/4chz55dm . Voir aussi Laimis réponses. edit: je viens aussi de relased que vous avez dit sur cette réponse. Simplement utiliser le même code que dans la réponse.cssString
ressemble à ceci:var cssString = "font-size:"+fontsize+"left:"+left+";top:"+top;
|| ou tout simplement:var cssString = "font-size:12px;left:200px;top:100px"
;À l'aide de Objet.attribuer:
Cela vous donne également la capacité de fusionner les styles, au lieu de réécrire le style CSS.
Vous pouvez également créer un raccourci de la fonction:
document.querySelector('html').style = Object.assign({}, document.querySelector('html').style, { color: 'red'})
mais rien ne se passe.Object.assign(document.querySelector('html').style, { color: 'red' });
...assurez-vous que le style n'est pas écrasé dans un élément inférieur. C'est très probable lors de l'utilisation sur lehtml
élément.Object.assign
en fait: developer.mozilla.org/en/docs/Web/JavaScript/Reference/...@Mircea: Il est très facile de définir le plusieurs styles pour un élément dans une seule déclaration.
Cela n'affecte pas les propriétés existantes et évite la complexité de la boucle ou de plugins.
ÊTRE PRUDENT: Si, plus tard, vous utilisez cette méthode pour ajouter ou modifier des propriétés de style, le précédent jeu de propriétés à l'aide de 'setAttribute" sera effacé.
removeAttribute
pourrait venir dans maniable pour ceux qui pourraient penser de l'utilisation desetAttribute
pour réinitialiser le styleFaire une fonction pour prendre soin d'elle, et lui passer des paramètres avec les styles que vous voulez changé..
et de l'appeler comme ça
pour les valeurs des propriétés à l'intérieur de la propertyObject vous pouvez utiliser des variables..
Une bibliothèque JavaScript permet de faire ces choses très facilement
jQuery
Objet et un pour-en-boucle
Ou, beaucoup plus élégant méthode est un objet de base & pour boucle
définir plusieurs propriétés de style css en Javascript
ou
Exemple:
Je suis tombé par hasard ici et je ne vois pas pourquoi il y a autant de code requis pour atteindre cet objectif.
Ajouter votre code CSS comme une chaîne de caractères.
JS:
HTML:
Vous pouvez avoir des cours particuliers dans vos fichiers css et ensuite affecter le nom de la classe à votre élément
ou vous pouvez faire une boucle par le biais des propriétés de styles -
Ne pense pas que c'est possible en tant que tel.
Mais vous pouvez créer un objet en dehors de la définition des styles et juste de la boucle à travers eux.
De développer davantage, de faire une fonction pour ça:
En utilisant un Javascript, vous ne pouvez pas définir tous les styles à la fois; vous devez utiliser de simples lignes pour chacun d'eux.
Cependant, vous n'avez pas à répéter le
document.getElementById(...).style.
code; créer une variable d'objet de référence, et vous allez rendre votre code plus lisible:...etc. Beaucoup plus facile à lire que votre exemple (et franchement, tout aussi facile à lire que le jQuery alternative).
(si le Javascript a été conçu correctement, vous pouvez également utiliser la
with
mot-clé, mais c'est mieux de le laisser seul, car il peut causer certains méchants problèmes d'espace de noms)cssText
.cssText
. Donc, vous avez raison; vous pouvez le faire, mais je le recommande contre elle pour la plupart des cas d'utilisation.obj.top
ouobj.style.color
aussi justs définit la ligne de la feuille de style en valeur. Et oui, dans ma réponse, j'ai dit que l'on pourrait remplacer les valeurs... ça dépend du contexte, si cela est utile ou pas.Votre meilleur pari pourrait être de créer une fonction qui définit des styles sur votre propre:
Noter que vous devrez toujours utiliser le javascript compatible avec les noms de propriété (d'où
backgroundColor
)Voir for .. in
Exemple:
C'est vieux thread, j'ai donc pensé pour ceux qui cherchent une réponse moderne, je dirais à l'aide de l'Objet.les touches();
Il existe des scénarios où à l'aide de CSS à côté de javascript pourrait faire plus de sens avec un tel problème. Regardez le code suivant:
Ce passe simplement entre les classes CSS et résout de nombreux problèmes liés au remplacement des styles. Il fait même votre code plus élégante.
Vous pouvez écrire une fonction qui permettra de définir les déclarations individuellement afin de ne pas remplacer les déclarations que vous n'avez pas d'alimentation. Disons que vous avez ce paramètre de l'objet liste des déclarations:
Vous pouvez écrire une fonction qui ressemble à ceci:
qui prend un
element
et unobject
propriété de la liste des déclarations de style à appliquer à cet objet. Voici un exemple d'utilisation:JS:
Je pense que c'est une façon très simple en ce qui concerne toutes les solutions ci-dessus:
Nous pouvons ajouter des styles de la fonction de Nœud de prototype:
Ensuite, il suffit d'appeler les styles de méthode sur n'importe quel Nœud:
Il permettra de préserver à tout les autres styles existants et les remplacer les valeurs présentes dans le paramètre de l'objet.
Pour Tapuscrit Angulaire 2+/7,
cette méthode a été testée pour modifier le CSS en innerhtml après cycle de vie du crochet de terminer le rendu de la vue.