2015-02-22 21 views
8

tôi tò mò tại sao điều này mộtJavascript yếu tố phong cách

<div class = "overlay"> 
    fdsfsd 
</div> 
.overlay{ 
    width: 100px; 
    height: 200px; 
    background-color:red; 
} 
alert(document.getElementsByClassName("overlay")[0].style.width); 

không cảnh báo gì cả. Tất nhiên tôi có thể viết <div style = "width:100px"> sau đó everthing hoạt động tốt, nhưng nó không tốt cho tôi, tôi cần css. Ở đây bạn có thể tìm thấy jsfiddle demo

Vì vậy, câu hỏi chính xác là: tại sao mã này không cảnh báo chiều rộng của div và cách cảnh báo nếu chiều rộng được đưa ra bởi css?

Trả lời

5

JavaScript .style chỉ liên quan đến kiểu nội tuyến trên phần tử.

Xem Documentation.

Nếu bạn muốn lấy chiều rộng của một phần tử, bạn nên sử dụng offsetWidth.

document.getElementsByClassName("overlay")[0].offsetWidth 

http://jsfiddle.net/9kwap3zy/7/

10

Như đã đề cập ở nơi khác, vấn đề là HTMLElement.style truy xuất các giá trị từ style attr ibute của phần tử; như bạn đang đặt phong cách của bạn với CSS, bạn cần phải thay vì sử dụng window.getComputedStyle(element, null).width:

var elem = document.getElementsByClassName("overlay")[0], 
 
    width = window.getComputedStyle(elem, null).width; 
 

 
console.log(width);
.overlay { 
 
    width: 100px; 
 
    height: 200px; 
 
    background-color: red; 
 
}
<div class="overlay"> 
 
    fdsfsd 
 
</div>

Tài liệu tham khảo:

+1

cảm ơn! nó hoạt động! – mondayguy

+1

Không biết ai đã bỏ phiếu bầu chọn này:/nhưng có thể muốn 'parseInt' – Emissary

+0

@Digigizmo: tôi cũng không làm gì, nó hơi khó chịu (nhưng có lẽ họ có lý do của họ). Tôi không chắc chắn về việc sử dụng 'parseInt()' (hoặc 'parseFloat()'), đơn giản vì chiều rộng không có các đơn vị (ngay cả khi JavaScript luôn trả về độ dài trong 'px') có vẻ hơi vô nghĩa; và không có đề cập đến việc muốn 'chỉ' các con số. Nếu câu hỏi được cập nhật để yêu cầu thì tôi sẽ cập nhật, vì có vẻ như quá sớm. –

1

Kiểu chỉ cho phép truy cập vào thông tin được đưa vào elem.style. Trong phong cách mẫu của bạn không nói gì về lề được xác định trong CSS. Sử dụng getComputedStyle().

var computedStyle = getComputedStyle(document.getElementsByClassName("overlay")[0], null) 

alert(computedStyle.width); 

jsfiddle demo

Các vấn đề liên quan