Je suis à la recherche d'un moyen à l'aide de jQuery pour retourner un objet de la styles pour le 1er appariés élément. Je pourrais alors passer cet objet à un autre appel de jQuery css méthode.
Par exemple, avec la largeur, je peux faire ce qui suit pour faire les 2 divs ont la même largeur:
$('#div2').width($('#div1').width());
Ce serait bien si je pouvais faire une saisie de texte ressembler à une plage existante:
$('#input1').css($('#span1').css());
où .css() sans argument retourne un objet qui peut être passée à .css(obj).
(Je ne peux pas trouver un plugin jQuery pour cela, mais il me semble qu'il doit exister. S'il n'existe pas, je vais changer la mienne ci-dessous dans un plugin et de le poster avec toutes les propriétés que j'utilise.)
Fondamentalement, je veux pseudo clone de certains éléments , mais utiliser une autre balise. Par exemple, j'ai un élément li que je veux cacher et de mettre un élément de saisie sur ce qui regarde la même chose. Lorsque l'utilisateur tape, on dirait qu'ils sont d'édition de l'élément inline.
Je suis aussi ouvert à d'autres approches pour ce pseudo-clonage de problème pour le montage. Toutes les suggestions?
Voici ce que j'ai actuellement. Le seul problème est juste en train de tous les styles possibles. Cela pourrait être une liste ridiculement longue.
jQuery.fn.css2 = jQuery.fn.css;
jQuery.fn.css = function() {
if (arguments.length) return jQuery.fn.css2.apply(this, arguments);
var attr = ['font-family','font-size','font-weight','font-style','color',
'text-transform','text-decoration','letter-spacing','word-spacing',
'line-height','text-align','vertical-align','direction','background-color',
'background-image','background-repeat','background-position',
'background-attachment','opacity','width','height','top','right','bottom',
'left','margin-top','margin-right','margin-bottom','margin-left',
'padding-top','padding-right','padding-bottom','padding-left',
'border-top-width','border-right-width','border-bottom-width',
'border-left-width','border-top-color','border-right-color',
'border-bottom-color','border-left-color','border-top-style',
'border-right-style','border-bottom-style','border-left-style','position',
'display','visibility','z-index','overflow-x','overflow-y','white-space',
'clip','float','clear','cursor','list-style-image','list-style-position',
'list-style-type','marker-offset'];
var len = attr.length, obj = {};
for (var i = 0; i < len; i++)
obj[attr[i]] = jQuery.fn.css2.call(this, attr[i]);
return obj;
}
Edit: j'ai été à l'aide du code ci-dessus pendant un certain temps. Il fonctionne bien et se comporte exactement comme l'original de la méthode css avec une exception: si 0 les arguments sont passés, il renvoie le résultat d'un calcul du style de l'objet.
Comme vous pouvez le voir, il appelle immédiatement l'original de la méthode css si c'est le cas qui s'applique. Sinon, il obtient le calcul des styles de tous les biens (recueillies à partir de Firebug calculée style de liste). Bien que l'obtention d'une longue liste de valeurs, c'est assez rapide. J'espère que c'est utile pour les autres.