2012-01-16 3 views
1

Я пытался получить верхнее положение элемента и значение margin-bottom.
, которая работала:jQuery добавить два значения свойств CSS

var top = -$('elem').postion().top; // lets say its -54 
var margin = $('elem').css('margin-top'); // lets say its 0 

Bud Мне нужно, чтобы добавить их для моей функции живого. поэтому top+margin, но jQuery дает -540 px, но ему нужно вернуть -54 px .. или когда его отрицательный результат просто дает -54-10px, когда мне нужно -64 px.

Есть ли что-нибудь, чтобы устранить это? Я не могу придумать это, и это меня раздражает!

Мой код:

var top = -$('#id1').position().top; 
var margin = $('.scrollable').css('margin-top'); 

var combine = top+margin; 

$('.animate').animate({'margin-top' : combine}); 
+0

второй является строкой (например: «10px») ... –

ответ

6

Bud мне нужно, чтобы добавить их для моей функции живого. поэтому верх + маржа, но JQuery дает 540 P

css значение строки, так, так как один из ваших операндов является строкой, то + интерпретируется как оператор конкатенации (54 + "0" = "540"), не является оператором сложения. (Details) Для того, чтобы превратить их в числа, используйте parseInt(str, 10), например .:

// I believe `top` will already be a number; check and if not, use parseInt here too, 
// e.g. var top = -parseInt($('#id1').position().top, 10); 
var top = -$('#id1').position().top; 

// This will definitely be a string that needs parsing; note that we're assuming 
// here that the margin has been given in `px` units. 
var margin = parseInt($('.scrollable').css('margin-top'), 10); 

// Now this + is an addition, not a concatenation  
var combine = top+margin; 

$('.animate').animate({'margin-top' : -combine}); 
+1

+1 не забываете о 10 параметра – Misiur

+0

@Misiur это не преобразование по умолчанию в любом случае? –

+0

Или используйте '+ str' для преобразования в число – Raynos

0

Попробуйте

var combine = parseInt(top) + parseInt(margin); 
3

Это потому, что он возвращает значения в виде строк, а с помощью оператора + на них Сцепляет. Вы можете использовать parseInt, чтобы получить число из строки. Это даже будет работать, если есть суффикс px, хотя он остановится на этом.

var top = $('elem').postion().top; 
var margin = $('elem').css('margin-top'); 

var total = parseInt(top, 10) + parseInt(margin, 10); 
+0

'parseInt (margin, 10);';) – Raynos

+0

Важное использование 'parseFloat' или' parseInt (int, 10); ' – noob

+0

Да, исправлено. Благодарю. –

Смежные вопросы