2010-09-29 3 views
1

У меня есть идентификатор моего элемента. Мне нужно добавить заданное значение (определенное переменной в javascript) к одному из атрибутов css элемента. То есть задан элемент id=my_id Как добавить x к атрибуту этого элемента margin-top?jQuery добавление к элементу css

ответ

5
var x = 20; 
$('#my_id').css('margin-top', function(index, value) { 
    if (isNaN(parseInt(value))) 
     return x; 

    return parseInt(value) + x 
}); 
+0

Это не удастся, если 'parseInt (value)' возвращает 'NaN'. Вы должны добавить некоторую защиту от этой возможности. – user113716

+0

Вы правы, добавили условие базового регистра. –

+0

Björn - К сожалению, с вашим изменением теперь будет возвращено значение 'x' 100% времени. Вы никогда не получите второй оператор return, потому что 'isNaN (value)' всегда будет оценивать значение 'true'. Причиной этого является то, что когда 'margin-top' имеет значение, параметр' value' даст размер в 'px' (например,' 10px'), который не является числом. – user113716

1

Один из подходов - use jQuery's .animate() method, но при условии, что он длится 0. Это позволяет вам отправить оператор += в виде строки и объединить значение x.

var x = 50; 

$('#my_id').animate({marginTop: '+=' + x}, 0); 

Другим способом было бы передать функцию в качестве второго параметра jQuery's .css() method. Возвращаемое значение будет текущим значением плюс x. Для этого требуется jQuery 1.4 или новее.

var x = 50; 

$('#my_id').css('margin-top', function(i,val) { return (parseInt(val) || 0) + x; }); 
2
var inc = 20; 
var mt = parseInt($('#my_id').css('margin-top').replace('px','')); 
$('#my_id').css('margin-top',(mt+inc)+"px"); 

Это предполагает, конечно, вы всегда использовать точки для Маржа волчка значений. Я использовал это надежно в течение некоторого времени.

+1

methodin - Это будет работать, но вам действительно не нужно делать '.replace ('px', '')', потому что это не будет мешать 'parseInt()'. Также вам не нужно добавлять '' px "' в ваш вызов '.css()', поскольку это предполагается, когда вы передаете целое число. Последнее, что вы должны подумать о кешировании элемента '# my_id' вместо того, чтобы дважды выбирать его подряд. – user113716

+0

Все действующие пункты. Разве parseInt всегда вел себя так? Должно быть, я думаю о моих днях javacript ie6. – methodin

+0

methodin - Я верю, что IE6 безопасен, но было бы неплохо провести двойную проверку. Разумеется, это не мешает иметь эту гарантию. Просто может быть ненужным. : О) – user113716