Ich suche nach einer Möglichkeit, mit jQuery ein Objekt mit berechneten Stilen für das erste übereinstimmende Element zurückzugeben. Ich könnte dieses Objekt dann an einen anderen Aufruf der CSS-Methode von jQuery übergeben.
Mit width kann ich beispielsweise Folgendes tun, damit die beiden Divs dieselbe Breite haben:
$('#div2').width($('#div1').width());
Es wäre schön, wenn ich eine Texteingabe wie eine vorhandene Spanne aussehen lassen könnte :
$('#input1').css($('#span1').css());
Dabei gibt .css () ohne Argument ein Objekt zurück, das an .css (obj) übergeben werden kann .
(Ich kann kein jQuery-Plugin dafür finden, aber es scheint zu existieren. Wenn es nicht existiert, werde ich mein Plugin unten in ein Plugin verwandeln und es mit allen von mir verwendeten Eigenschaften veröffentlichen.)
Grundsätzlich möchte ich bestimmte Elemente pseudoklonen, aber ein anderes Tag verwenden . Zum Beispiel habe ich ein li-Element, das ich ausblenden möchte, und ein Eingabeelement darüber, das gleich aussieht. Wenn der Benutzer tippt, sieht es so aus, als würde er das Element inline bearbeiten .
Ich bin auch offen für andere Ansätze für dieses Pseudo-Klonproblem zur Bearbeitung. Irgendwelche Vorschläge?
Folgendes habe ich derzeit. Das einzige Problem ist nur, alle möglichen Stile zu bekommen. Dies könnte eine lächerlich lange Liste sein.
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;
}
Bearbeiten: Ich benutze jetzt seit einer Weile den obigen Code. Es funktioniert gut und verhält sich mit einer Ausnahme genau wie die ursprüngliche CSS-Methode: Wenn 0 Argumente übergeben werden, wird das berechnete Stilobjekt zurückgegeben.
Wie Sie sehen, wird sofort die ursprüngliche CSS-Methode aufgerufen, wenn dies der Fall ist. Andernfalls werden die berechneten Stile aller aufgelisteten Eigenschaften abgerufen (aus der Liste der berechneten Stile von Firebug). Obwohl es eine lange Liste von Werten gibt, ist es ziemlich schnell. Hoffe, es ist nützlich für andere.