2012-02-17 37 views
8

Có cách nào trong javascript/jQuery để có hai biến với giá trị "60px" và "40px" và thêm chúng lại với nhau để có được "100px" không?Thêm giá trị pixel javascript?

Hoặc theo nghĩa tổng quát hơn, tôi đang cố gắng để tính toán vị trí của các đối tượng liên quan đến các đối tượng khác và nó sẽ thực sự tiện lợi nếu tôi có thể làm một cái gì đó như thế này:

$('#object2').css('left', $('#object1').css('left')+'60px'); 

Tất nhiên, đó chỉ cung cấp "40px60px" không hợp lệ.

Trả lời

13

remove px từ chuỗi, thêm giá trị, sau đó thêm px lại

(parseInt("40px".replace(/px/,""))+60)+"px" 
+0

Đó mang lại cho tôi "4060px "trong nhật ký bảng điều khiển chrome. Tuy nhiên bằng cách sử dụng parseInt như đề xuất của câu trả lời khác tôi nhận được "100px" từ sửa đổi này: '(parseInt (" 40px ".replace (/ px /," ")) + 60) +" px "' – joshuahedlund

+0

Phải, sai lầm của tôi, nên đặt số ở phía trước, nếu không nó sẽ thêm chuỗi. parseInt làm cho số ra khỏi chuỗi, vì vậy cũng nên làm việc tốt. –

4

Bạn đang tìm kiếm parseInt() chức năng.

var left1 = "40px"; 
var left2 = "60px"; 

// Add the integer values of the left values together 
var leftTotal = parseInt(left1, 10) + parseInt(left2, 10) + "px"; 

Điều tra giá trị cũng là phương pháp parseFloat(). Nó thực hiện tương tự như parseInt(), nhưng hoạt động trên các số có số thập phân (còn gọi là các giá trị dấu phảy động).

0

Bạn có thể làm điều này bằng cách phân tích các giá trị css.left của đối tượng, phần nào như thế này:

$('#object2').css('left', (parseInt($('#object1').css('left')) + 60) + 'px'); 

Nhưng bạn nên lưu ý, rằng giá trị css.left có thể không được px nhưng cũng có thể là %, em, v.v. do đó cách sạch sẽ sẽ sử dụng jQuery offset method vì điều đó sẽ cung cấp cho bạn giá trị pixel chính xác.

$('#object2').css('left', ($('#object1').offset().left + 60) + 'px'); 
1
var shiftedRight = (parseFloat($('#object1').css('left')) + 60) + 'px'; 
$('#object2').css('left', shiftedRight); 

parseFloat sẽ phân tích chỉ tiền tố của chuỗi đó là một số.

4

Có lẽ cách hiệu quả nhất là

parseInt("40px", 10) + parseInt("60px", 10) + "px" 

Các 10 's trong các cuộc gọi parseInt là cần thiết để bảo vệ chống lại các giá trị bị nhầm lẫn tính bằng một cái gì đó khác hơn là cơ sở 10

+0

Dường như không hoạt động trên Chrome, tôi dường như nhận được NaN cho đến khi thành phần 'px' bị xóa – sradforth

+0

Tôi nghĩ đây là câu trả lời hay hơn, vì ** 1: ** câu hỏi là: _two ** variables ** với các giá trị "60px" và "40px" _ và trong câu trả lời được chấp nhận giá trị thứ hai không phải là biến, ** 2: ** 'parseInt' sẽ chuyển đổi '40px' thành 40, do đó không cần' thay thế (/ px/, "") '. Việc thêm '+" px "' sẽ chuyển đổi số nguyên thành chuỗi, giống như cách thực hiện nó trong câu trả lời được chấp nhận. Giải pháp này đang hoạt động bình thường, vì vậy ai đó có thể giải thích tại sao @wheresrhys lại nhận NaN? – papo

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