2012-04-21 32 views
20
document.getElementById('myId').style; 

là một cách để truy cập vào thuộc tính style .. Ngoài ra chúng tôi có thể làm điều tương tự sử dụng document.getElementById('myId').getAttribute('style');Những cách khác nhau của việc tiếp cận các giá trị thuộc tính sử dụng javascript

sự khác biệt giữa hai cách nhận giá trị thuộc tính là gì ..Và cái nào là thích hợp hơn?

+1

tôi nghĩ rằng bạn cũng có thể làm 'document.getElementById ('myid') [ 'phong cách']'. Ví dụ, nó có lý do tương tự để sử dụng 'getAttribute()' như @gwynhowell giải thích. – Joseph

+0

đó chỉ là một cách khác để truy cập vào một thuộc tính đối tượng .. phải không? –

+0

yup, chỉ là một cách khác. – Joseph

Trả lời

15

Trong ví dụ đầu tiên bạn không truy cập thuộc tính style, nhưng đến thuộc tính style. Giá trị của tài sản có thể là bất cứ điều gì, trong trường hợp tài sản style là một đối tượng. Trong ví dụ thứ hai bạn đang truy cập vào thuộc tính style của thẻ. Giá trị của thuộc tính chỉ có thể là chuỗi.

Trong trường hợp một số thuộc tính có một ánh xạ giữa chúng. Vì vậy, nếu bạn đặt thuộc tính style trên nút HTML, thuộc tính style của bạn được cập nhật và kiểu của bạn được áp dụng. Tuy nhiên, điều này không phải lúc nào cũng đúng: một lỗi nổi tiếng trong một số phiên bản của IE (ít nhất là cho đến IE7) là loại ánh xạ bị hỏng, do đó, thiết lập một thuộc tính không được phản ánh đến thuộc tính.

Vì vậy, nếu bạn muốn đặt thuộc tính trên nút HTML, bạn phải sử dụng thuộc tính thứ hai. Nhưng nếu bạn muốn truy cập vào thuộc tính của đối tượng mà đại diện cho nút HTML, bạn phải sử dụng nút đầu tiên.

Trong trường hợp của style, tùy chọn đầu tiên được khuyến nghị.

Để làm cho nó rõ ràng với một ví dụ (trong các trình duyệt hiện đại):

document.body.style.border = "1px solid red"; 
console.log(document.body.style); // [object CSSStyleDeclaration] 
console.log(document.body.getAttribute("style")); // "border: 1px solid red;" 
+1

cảm ơn câu trả lời ... Đó là lý do tại sao tôi nhận được cảnh báo (document.getElementById ('myId'). Style) như khai báo CSSstyle và cảnh báo (document.getElementById ('myId'). Style) như chuỗi http: // jsfiddle. net/rQrRj /? –

+1

mhm, không chắc chắn tôi đã nhận nó, bạn đăng trong bình luận cùng một mã cho cả hai; và trong jsfiddle bạn đăng bài không có phong cách. Nhưng hành vi là chính xác: bạn thiết lập một thuộc tính tùy chỉnh, nhưng vì không có ánh xạ tới thuộc tính mà bạn có thuộc tính đó là không xác định. Lưu ý rằng trong phiên bản cũ của IE (ít nhất) nếu bạn thiết lập một "tài sản expando", bạn sẽ có nó như là thuộc tính là tốt, nếu nó là chuỗi. Tất cả các chủ đề trong IE là khá sai lầm. – ZER0

+0

Có bất kỳ thuộc tính nào khác trả về đối tượng trên document.body.

-1

không có sự khác biệt.

document.getElementById('myId').style; 

là viết tắt của

document.getElementById('myId').getAttribute('style'); 

việc sử dụng chỉ cho getAttribute ('AttributeName') sẽ được nếu AttributeName không phải là một tên biến javascript hợp lệ, vì vậy đóng gói nó trong dấu ngoặc kép sẽ là con đường duy nhất để truy cập nó.

+4

Điều này không chính xác. getAttribute cũng sẽ trả về giá trị của các thuộc tính không chuẩn. Điều này không làm việc với ký hiệu thuộc tính đối tượng, vì các thuộc tính không chuẩn này không được chuyển đổi thành thuộc tính. http://jsfiddle.net/rQrRj/ –

+0

cảm ơn câu trả lời ... –

+2

Điều đó không đúng.Trong thực tế, nếu họ giống nhau, bạn sẽ có được kết quả tương tự trong cả hai nhận được và thiết lập một phong cách. Tuy nhiên, vì giá trị bạn thu được là khác nhau, chúng không giống nhau. Xem: 'document.getElementById (" myId ") getAttribute (" style "). Border =" 1px solid red "' so sánh với 'document.getElementById (" myId "). Style.border =" 1px solid red ";' Trong thực tế, phương thức đầu tiên trả về một chuỗi không phải là một đối tượng ('CSSStyleDeclaration'). – ZER0

4

getAttribute sẽ trả về giá trị của các thuộc tính phi tiêu chuẩn cũng như những tiêu chuẩn.

Ký hiệu thuộc tính đối tượng sẽ không, vì thuộc tính không chuẩn không được chuyển đổi thành thuộc tính.

<a id="test" foo="bar"> ... </a>​ 

<script> 

    console.log(document.getElementById('test').foo); // undefined 

    console.log(document.getElementById('test').getAttribute('foo')); // "bar" 

</script> 
Các vấn đề liên quan