Nhận giá trị hàng đầu css dưới dạng số không phải là chuỗi?


123

Trong jQuery, bạn có thể lấy vị trí hàng đầu so với giá trị gốc dưới dạng một số, nhưng bạn không thể nhận giá trị hàng đầu css dưới dạng số nếu nó được đặt trong px.
Giả sử tôi có những thứ sau:

#elem{
  position:relative;
  top:10px;
 }
<div>
  Bla text bla this takes op vertical space....
  <div id='elem'>bla</div>
</div>
$('#elem').position().top; //Returns the number (10+(the vertical space took by the text))
$('#elem').css('top'); //Returns the string '10px'

Nhưng tôi muốn có thuộc tính css top là số 10.
Làm thế nào để đạt được điều này?

Câu trả lời:


213

Bạn có thể sử dụng hàm parseInt () để chuyển đổi chuỗi thành một số, ví dụ:

parseInt($('#elem').css('top'));

Cập nhật: (theo đề xuất của Ben): Bạn cũng nên cung cấp cơ số:

parseInt($('#elem').css('top'), 10);

Buộc nó phải được phân tích cú pháp dưới dạng số thập phân, nếu không các chuỗi bắt đầu bằng '0' có thể được phân tích cú pháp dưới dạng số bát phân (có thể tùy thuộc vào trình duyệt được sử dụng).


57
Bạn cũng nên cung cấp cơ số: parseInt ($ ('# elem'). Css ('top'), 10); Buộc nó phải được phân tích cú pháp dưới dạng cơ số 10, nếu không các chuỗi bắt đầu bằng '0' sẽ được phân tích cú pháp trong cơ sở 8.
Ben

3
Tuy nhiên, nó có thể là một phao, vì vậy tốt hơn nên sử dụng parseFloat.
Vsevolod Golovanov

25

Một plugin jQuery dựa trên câu trả lời của M4N

jQuery.fn.cssNumber = function(prop){
    var v = parseInt(this.css(prop),10);
    return isNaN(v) ? 0 : v;
};

Vì vậy, sau đó bạn chỉ cần sử dụng phương pháp này để nhận các giá trị số

$("#logo").cssNumber("top")

13

Một plugin thực tế / hiệu quả hơn một chút dựa trên câu trả lời của Ivan Castellanos (dựa trên câu trả lời của M4N). Việc sử dụng || 0sẽ chuyển Nan về 0 mà không cần qua bước kiểm tra.

Tôi cũng đã cung cấp các biến thể float và int để phù hợp với mục đích sử dụng:

jQuery.fn.cssInt = function (prop) {
    return parseInt(this.css(prop), 10) || 0;
};

jQuery.fn.cssFloat = function (prop) {
    return parseFloat(this.css(prop)) || 0;
};

Sử dụng:

$('#elem').cssInt('top');    // e.g. returns 123 as an int
$('#elem').cssFloat('top');  // e.g. Returns 123.45 as a float

Thử nghiệm fiddle trên http://jsfiddle.net/TrueBlueAussie/E5LTu/


Có vẻ như người ta nên một trong hai luôn luôn sử dụng cssFloat hoặc xem xét cssInt rằng sẽ tước một giá trị như 25.9999999px đến 25.
justingordon

1
@justingordon: Đó là hành vi cắt xén số nguyên chính xác cho một int, vì vậy nó thực sự phụ thuộc vào việc sử dụng giá trị bắt buộc.
Gone Coding
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.