2012-06-09 3 views
9

Ich habe eine gleiche question fragte hier (konnte nicht kommentieren, vielleicht nicht ein Privileg), ich möchte Css Breite Wert in Stylesheet, aber noch nicht definiert jquery -Get CSS-Eigenschaften Werte für eine noch nicht angewandte Klasse

$('<div/>').addClass('span6').width(); 

angewendet auf ein beliebiges Element in dom, (seine Bootstrap CSS mit Raster mit reaktions Abfragen Medien)

.span6 { 
width: 570px; 
} 

jedoch Lösung in oben genannten Frage return 0 dh wie diese

vorgesehen funktioniert aber wenn ich etwas tun wie dieses

$('<div/>').addClass('span6').hide().appendTo('body').width(); 

jeden einfachen Weg, ohne div anzuhängen?

+0

Wenn man wirklich (wirklich) wollen das Element vermeiden Einfügen Sie eine Karte mit den Breiten Sie brauchen machen könnte: p – leopic

+0

Warum wollen Sie das tun wollen? Vielleicht gibt es eine alternative/einfachere Möglichkeit, Ihr Problem zu lösen? –

+0

Das letzte Mal, als ich eine "get style properties with jquery" -Frage sah, endete sie mit einem Regex als akzeptierte Antwort. Ich schätze, Ihre aktuelle Lösung ist einfach genug. Sie könnten '.remove()' aufrufen, um das DOM zu bereinigen, nachdem Sie den gewünschten CSS-Eigenschaftswert erhalten haben oder immer ein 'display: none'-Element haben, um den CSS zu übernehmen und den Wert zu erhalten. –

Antwort

28

Um einen CSS-Eigenschaft Wert zu lesen, müssen Sie ein verborgenes Element auf das DOM dynamisch einzufügen, die Eigenschaft lesen und es schließlich entfernen:

var getCSS = function (prop, fromClass) { 

    var $inspector = $("<div>").css('display', 'none').addClass(fromClass); 
    $("body").append($inspector); // add to DOM, in order to read the CSS property 
    try { 
     return $inspector.css(prop); 
    } finally { 
     $inspector.remove(); // and remove from DOM 
    } 
}; 

jsFiddle here

+1

Das ist im Grunde, was OP tut - '.css ('display', 'none')' ist praktisch das gleiche wie '.hide()', aber +1 für die Erweiterung zu einer brauchbaren Funktion und der 'finally' Block der läuft nach einer Rückkehr. –

+0

ist möglicherweise der einzige einfache Weg, es mit "weniger schreiben und mehr jquery" zu tun: P –

+0

Ich habe es für 'Hintergrund-Position 'versucht, aber es gibt' 0% 0%' anstelle des tatsächlichen Wertes zurück. .. –

4

Große Antwort von Jose. Ich habe es modifiziert, um mit komplexeren CSS-Selektoren zu helfen.

var getCSS2 = function (prop, fromClass, $sibling) { 

    var $inspector = $("<div>").css('display', 'none').addClass(fromClass); 
    if($sibling != null){ 
     $sibling.after($inspector); //append after sibling in order to have exact 
    } else { 
     $("body").append($inspector); // add to DOM, in order to read the CSS property 
    } 
    try { 
     return $inspector.css(prop); 
    } finally { 
     $inspector.remove(); // and remove from DOM 
    } 
}; 

JSFiddle