2012-03-15 33 views
5

Tôi đang cố gắng lấy giá trị của một thuộc tính CSS được thừa hưởng bằng cách sử dụng Javascript. Tôi đã không thể tìm thấy một câu trả lời toàn diện.Tôi làm cách nào để có được giá trị CSS được kế thừa bằng cách sử dụng Javascript?

Ví dụ CSS:

div { 
    width: 80%; 
} 

Ví dụ Markup:

<div id="mydiv"> Some text </div> 

Sử dụng javascript (jQuery, hoặc mẹ đẻ), tôi cần để có được chiều rộng của element-- không bằng pixel, nhưng chuỗi "80%".

$('#mydiv').css('width'); // returns in px 
$('#mydiv')[0].style.width // empty string 
getComputedStyle($('#mydiv')[0]).width // returns in px 

Lý do tôi cần giá trị dưới dạng chuỗi là vì tôi cần sao chép kiểu này sang yếu tố khác. Nếu nó được khai báo là phần trăm, giá trị khác cần phải là phần trăm. Nếu nó được khai báo bằng px, giá trị khác cần phải bằng px.

Bí quyết thực sự là thuộc tính này có thể được kế thừa, không được khai báo rõ ràng trên phần tử (như trong ví dụ của tôi).

Có ai có ý tưởng nào không?

+0

Có thể trùng lặp [Giá trị CSS kế thừa qua Javascript] (http://stackoverflow.com/questions/1169967/inherited-css-values-via-javascript) – Martin

+0

Bạn không chỉ gặp vấn đề nếu cần có giá trị kế thừa , bạn cũng cần nhận được giá trị%, cách xa đơn giản: http://stackoverflow.com/questions/7131462/getting-values-of-global-stylesheet-in-jquery/7132264#7132264 – maxedison

+0

@Martin: Đó là không hoàn toàn trùng lặp ... Tôi đã thấy câu trả lời đó, nhưng tôi cần giá trị%. – t3rminus

Trả lời

3

Không có cách nào để có được những giá trị phần trăm Tôi sợ. Bạn có thể thử một cái gì đó như thế này:

var widthpx = getComputedStyle($('#mydiv')[0]).width; 
var parentWidth = $('#mydiv').parent().css('width') 

var width = (100 * parseFloat(widthpx)/parseFloat(parentWidth)) + '%'; 
+0

Tôi xin lỗi, nhưng đó là sai. Xem câu trả lời của tôi. – Bergi

+0

Phần nào sai? – Jivings

+0

rằng điều đó là không thể. Có nhiều cách, ngay cả khi không có jQuery. – Bergi

0

lấy giá trị offSetWidth của phần tử và offsetWidth của offsetParent của nó và tính phần trăm từ hai số nguyên.

0

Điều này liên kết trình xử lý sự kiện với thành phần cho sự kiện click và cảnh báo độ rộng tương đối của phần tử so với phần tử gốc của phần tử đó.

​$('#mydiv').on('click', function() { 

    //element width divided by parent width times 100 to make a percentage 
    alert(Math.round($(this).width()/$(this).parent().width() * 100) + '%'); 
});​​​​​​​​​​ 

Đây là một bản demo: http://jsfiddle.net/X67p5/

5

Những gì bạn đang tìm kiếm là this quirksmode.org article. Nó đề xuất chức năng

function getStyle(el, styleProp) { 
    var x = document.getElementById(el); 
    if (x.currentStyle) 
     var y = x.currentStyle[styleProp]; 
    else if (window.getComputedStyle) 
     var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp); 
    return y; 
} 

Tuy nhiên, bạn nên đọc kỹ bài viết đó. Họ tên của styleProp s không thực sự qua trình duyệt, và bạn sẽ thấy cách trình duyệt khác nhau xử lý này. Opera dường như có sự hỗ trợ tốt nhất để báo cáo các giá trị chính xác.

+0

Đây là thư viện và nó không chính thức hỗ trợ các phiên bản trình duyệt mới nhất. – Jivings

+0

Tôi không thể thấy lý do tại sao một chức năng ví dụ sẽ là một thư viện? – Bergi

+0

Tôi cho rằng nó không phải là, nó chỉ xuất hiện được. Tại sao không chỉ đăng đoạn mã trong câu trả lời của bạn thay vì liên kết với nó? Sau đó, tôi sẽ loại bỏ downvote của tôi. – Jivings

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