2013-07-05 8 views
11

Jaka jest różnica między wartościami zwracanymi przez .width() z jQuery, .css('width') z jQuery, a atrybutem .style.width w węźle?Jaka jest różnica między jQuery .width(), style.width i jQuery .css ("width")?

Jestem ciekawy, ponieważ próbując ustawić szerokość dwóch komórek tabeli jako równych, pierwsze dwa dały mi tę samą błędną odpowiedź. Co właściwie mierzą i dlaczego nie jest taka sama jak wartość, którą widzę w atrybucie .style, gdy przeglądam element w przeglądarce?

+0

Tak że powyżej musi być usunięty, ale nie pozwoli mi z jakiegoś dziwnego powodu – iConnor

+0

sprawdzić ten jsfiddle: http://jsfiddle.net/EjPBy/ –

+0

[Tylko zmodyfikowany @ kodu A.Wolff za aby pokazać szerokość) (http://jsfiddle.net/EjPBy/1/), ale dla 'sytle.width', nadal nic nie pokazuje .. – bonCodigo

Odpowiedz

6

Z width urzędowych dokumentów

Różnica .css (szerokość), a .width() jest fakt, że urządzenie powraca mniej wartości pikseli (na przykład 400), podczas gdy poprzedni zwraca wartość z jednostkami nienaruszonymi (na przykład 400 pikseli). Metoda .width() jest zalecana, gdy w obliczeniach matematycznych należy zastosować szerokość elementu.

Powiedziałbym, nie ma różnicy między .css('width') i .style.with jak css() metoda służy do ustawiania właściwości obiektu stylu.

Różnica między .css('width')/.width() i .style.with jest, że metody jQuery uzyskać styl wyliczone window.getComputedStyle(elem, null). Ta metoda służy do odczytu rzeczywistej właściwości po zastosowaniu CSS i stylów.

+0

Używam ich do uzyskania właściwości obiektu, i jest różnica jeden piksel w zwracanych wartościach. '.style.width' jest poprawne, pozostałe są poniżej 1px. – ckersch

+0

@ckersch jakie są reguły CSS zastosowane do tego elementu? Widzisz, że mówisz o komórce tabeli, jakiś specjalny styl jest stosowany do tego rodzaju elementu, może to może to wyjaśnić. Sprawdź w innej przeglądarce, czy masz takie samo zachowanie. –

+0

z arkusza stylów: kolor tła: #FFF; border: 1px solid #AAA; wypełnienie: 4px; padding-right: 10px; wypełnienie po lewej: 18 pikseli; vertical-align: top; display: table-cell; ---------- Zestaw z jQuery: szerokość: 124px; – ckersch

0

.width() da wam, co jest appied .css ('width') da wam to, co jest w atrybucie style

+0

Każdy pomysł, dlaczego .css ("szerokość") i .style.width byłyby inne? Komórki mają granice, jeśli to istotne. Pierwsza zwraca "123px", a druga daje "124px", co jest poprawne. – ckersch

0

.css ('width') zwraca atrybut z jednostki dołączany chwilę .width() nie, da ci liczbę w pikselach.

Więc jeśli masz element o szerokości 200px .css ('width') zwróci "200px" podczas .width() zwróci 200.

0

Istnieje również różnica w szerokości "przeznaczone" a rzeczywistej szerokości. .width() da ci szerokość treści elementu, .css ("width") da ci szerokość zgodnie z zamierzeniem arkusza stylów.

2

Uzupełniając odpowiedź Claudio Redi: patrz różnicę żywo: http://jsfiddle.net/vovkss/kPXaB/

mam używany cm jednostek celowo wykazać, że wyjście .css('width')może być zamienione na piksele (lub innych urządzeń), natomiast .width() jest zawsze liczbą całkowitą reprezentującą liczbę pikseli.

Należy pamiętać, że .style.width dotyczy tylko stylów śródliniowych.

  • HTML:

    <div id="mydivInlineStyle" style="width: 10cm"><b>Inline style:</b> 
    </div> 
    
    <div id="mydivExternalStylesheet"><b>External stylesheet:</b> 
    </div> 
    
  • CSS:

    div { 
        width: 10cm; 
        border: 10px solid blue; padding: 11px; margin: 12px; 
        background: aqua; white-space: pre; 
    } 
    
  • JS:

    $('div').each(function(){ 
        $(this).append(
        'jQuery width(): ' + $(this).width() + "\n" + 
        '.css(\'width\'): ' + $(this).css('width') + "\n" + 
        '.style.width: ' + this.style.width 
    ); 
    }); 
    
  • wyjściowa:

    Inline style: 
        jQuery width(): 378 
        .css('width'): 378px 
        .style.width: 10cm 
    
    External stylesheet: 
        jQuery width(): 378 
        .css('width'): 378px 
        .style.width: 
    
Powiązane problemy