2012-06-09 17 views
9

Mam to samo pytanie question tutaj (nie mogłem się wypowiedzieć na ten temat, może nie mam przywileju), chcę uzyskać wartość szerokości css zdefiniowaną w arkuszu stylów, ale jeszcze nie stosowana na dowolnym elemencie w dom, (jego bootstrap css z siatki z zapytaniami mediów reagujących)jquery -Get wartości właściwości CSS dla jeszcze nie stosowanej klasy

.span6 { 
width: 570px; 
} 

jednak rozwiązanie przewidziane w wyżej przywołanych cofnięcie pytanie 0 IE jak ten

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

ale działa, jeśli coś zrobić lubię to

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

w łatwy sposób bez dołączania tego elementu div?

+0

Jeśli naprawdę (naprawdę) chce uniknąć wstawiania elementu, można zrobić mapę z szerokościami potrzebne są: p – leopic

+0

Dlaczego chcesz to zrobić? Może istnieje alternatywny/łatwiejszy sposób rozwiązania problemu? –

+0

Ostatni raz, gdy zobaczyłem pytanie "uzyskaj właściwości stylu z jquery", zakończyło się ono pewnym regex jako zaakceptowaną odpowiedzią, domyślam się, że twoje obecne rozwiązanie jest dość proste. Możesz wywołać '.remove()', aby wyczyścić DOM po uzyskaniu pożądanej wartości właściwości CSS lub zawsze mieć element 'display: none', aby zastosować CSS i uzyskać wartość, usuwając następnie zastosowaną klasę CSS. –

Odpowiedz

28

W celu odczytania wartości właściwości CSS, trzeba dynamicznie wstawić ukryty element do DOM, odczytać właściwość i ostatecznie usunąć go:

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

Zasadniczo to robi OP - '.css (" display "," none ")' jest praktycznie takie samo jak '.hide()', ale +1 dla rozszerzenia go do użytecznej funkcji i 'finally' bloku, który uruchamia "po" "return". –

+0

może to być jedyny łatwy sposób, aby to zrobić z "mniej pisać i robić więcej jquery": P –

+0

Próbowałem go dla 'background-position', ale zwraca' 0% 0% 'zamiast rzeczywistej wartości. .. –

4

Wielką odpowiedź przez Jose. Zmodyfikowałem go, aby pomóc w bardziej złożonych selektorach css.

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

Powiązane problemy