Thay đổi động thuộc tính kiểu phần tử bằng JavaScript


117

Tôi có một style sheet nhất định cho div. Bây giờ tôi muốn sửa đổi động một thuộc tính của div bằng cách sử dụng js.

Tôi làm nó như thế nào?

document.getElementById("xyz").style.padding-top = "10px";

Điều này có chính xác?

Câu trả lời:


123

Nó gần như chính xác.

-là một toán tử javascript, bạn thực sự không thể có điều đó trong tên thuộc tính. Nếu bạn đang thiết lập,borderThay vào đó, hoặc một cái gì đó đơn lẻ như vậy, mã của bạn sẽ hoạt động tốt.

Tuy nhiên, điều bạn cần nhớ padding-topvà đối với bất kỳ tên thuộc tính có dấu gạch nối nào, là trong javascript, bạn loại bỏ dấu gạch nối và đặt chữ hoa tiếp theo, vì vậy trong trường hợp của bạn là như vậy paddingTop.

Có một số ngoại lệ khác. JavaScript có một số từ dành riêng, vì vậy bạn không thể đặt floatnhư vậy, chẳng hạn. Thay vào đó, trong một số trình duyệt bạn cần sử dụng cssFloatvà những trình duyệt khác styleFloat. Đối với những khác biệt như thế này, bạn nên sử dụng một khuôn khổ như jQuery, để xử lý các điểm không tương thích của trình duyệt cho bạn ...


213

Ngoài các câu trả lời khác, nếu bạn muốn sử dụng phân vùng gạch ngang cho thuộc tính kiểu, bạn cũng có thể sử dụng:

document.getElementById("xyz").style["padding-top"] = "10px";

3
Tôi cũng vậy, điều này thực sự hữu ích cho các hàm động, người ta có thể chuyển kiểu dưới dạng giá trị chuỗi, sau đó đặt kiểu và giá trị. Giải pháp tuyệt vời.
raphie

1
Ngoài ra, thêm vào những gì @raphie nói, bạn cũng có thể sử dụng document.getElementById("xyz").style["paddingTop"] = '10px'.
Bàn chải đánh răng

1
@anunkjn: bạn nói đúng. Tôi muốn nói rằng nó không hoạt động nữa trong FF. Mà, cũng ... kỳ lạ.
KooiInc

17

Tôi giải quyết vấn đề tương tự với:

document.getElementById("xyz").style.padding = "10px 0 0 0";

Hy vọng rằng sẽ giúp.


2
Điểm mấu chốt của việc làm theo cách này là bạn có được phần đệm cho các mặt khác được đặt thành 0. Và đôi khi bạn không muốn điều đó.
Gustavo Straube


15

Giả sử bạn có HTML như sau:

<div id='thediv'></div>

Nếu bạn muốn sửa đổi thuộc tính style của div này, bạn sẽ sử dụng

document.getElementById('thediv').style.[ATTRIBUTE] = '[VALUE]'

Thay thế [ATTRIBUTE]bằng thuộc tính style bạn muốn. Hãy nhớ bỏ dấu '-' và viết hoa chữ cái sau.

Ví dụ

document.getElementById('thediv').style.display = 'none'; //changes the display
document.getElementById('thediv').style.paddingLeft = 'none'; //removes padding

1
Như đã nêu trong câu trả lời được chấp nhận, có một số ngoại lệ. Thích float.
Gustavo Straube

8
document.getElementById("xyz").style.padding-top = '10px';

sẽ là

document.getElementById("xyz").style["paddingTop"] = '10px';

7

Tôi khuyên bạn nên sử dụng một hàm chấp nhận id phần tử và một đối tượng chứa các thuộc tính CSS để xử lý điều này. Bằng cách này, bạn viết nhiều kiểu cùng một lúc và sử dụng cú pháp thuộc tính CSS chuẩn.

//function to handle multiple styles
function setStyle(elId, propertyObject) {
    var el = document.getElementById(elId);
    for (var property in propertyObject) {
        el.style[property] = propertyObject[property];
    }
}

setStyle('xyz', {'padding-top': '10px'});

Vẫn tốt hơn, bạn có thể lưu trữ các kiểu trong một biến, điều này sẽ giúp quản lý thuộc tính dễ dàng hơn nhiều, ví dụ:

var xyzStyles = {'padding-top':'10px'}
setStyle('xyz', xyzStyles);

Hy vọng rằng sẽ giúp


7

Ngạc nhiên rằng tôi không thấy giải pháp cách cho bộ chọn truy vấn bên dưới ,

document.querySelector('#xyz').style.paddingTop = "10px"

Các giải pháp CSSStyleDec Tuyên bố , một ví dụ về câu trả lời được chấp nhận

document.getElementById('xyz').style.paddingTop = "10px";

5
document.getElementById("xyz").setAttribute('style','padding-top:10px');

cũng sẽ làm công việc.


5
Nhược điểm của việc làm theo cách này là bạn sẽ loại bỏ bất kỳ kiểu nội tuyến nào khác. Đó là bởi vì bạn đang thay thế toàn bộ giá trị thuộc tính. Tôi đoán rằng việc lấy kiểu hiện tại, kiểm tra giá trị hiện có cho thuộc tính bạn muốn đặt, sau đó thêm / thay thế bằng giá trị mong muốn là giải pháp tốt hơn.
Gustavo Straube

Đã đồng ý. Nhưng OP cần một giải pháp gần hơn với những gì anh ta đã làm mà không tính đến trường hợp sử dụng của bạn. Đây là một trong những cách đơn giản nhất để đạt được điều đó, nhưng nó chắc chắn không phải là tốt nhất.
Pinkesh Badjatiya

@GustavoStraube, tôi sẽ không gọi nó là nhược điểm. Trong nhiều trường hợp, đây chính xác là những gì nhà phát triển muốn làm - tức là ghi đè kiểu của phần tử. Tôi sẽ gọi nó là hệ quả của việc làm theo cách này.
stwr667

5
document.getElementById('id').style = 'left: 55%; z-index: 999; overflow: hidden; width: 0px; height: 0px; opacity: 0; display: none;';

làm việc cho tôi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.