У меня есть идентификатор моего элемента. Мне нужно добавить заданное значение (определенное переменной в javascript) к одному из атрибутов css элемента. То есть задан элемент id=my_id
Как добавить x
к атрибуту этого элемента margin-top
?jQuery добавление к элементу css
ответ
var x = 20;
$('#my_id').css('margin-top', function(index, value) {
if (isNaN(parseInt(value)))
return x;
return parseInt(value) + x
});
Один из подходов - 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; });
var inc = 20;
var mt = parseInt($('#my_id').css('margin-top').replace('px',''));
$('#my_id').css('margin-top',(mt+inc)+"px");
Это предполагает, конечно, вы всегда использовать точки для Маржа волчка значений. Я использовал это надежно в течение некоторого времени.
methodin - Это будет работать, но вам действительно не нужно делать '.replace ('px', '')', потому что это не будет мешать 'parseInt()'. Также вам не нужно добавлять '' px "' в ваш вызов '.css()', поскольку это предполагается, когда вы передаете целое число. Последнее, что вы должны подумать о кешировании элемента '# my_id' вместо того, чтобы дважды выбирать его подряд. – user113716
Все действующие пункты. Разве parseInt всегда вел себя так? Должно быть, я думаю о моих днях javacript ie6. – methodin
methodin - Я верю, что IE6 безопасен, но было бы неплохо провести двойную проверку. Разумеется, это не мешает иметь эту гарантию. Просто может быть ненужным. : О) – user113716
Это не удастся, если 'parseInt (value)' возвращает 'NaN'. Вы должны добавить некоторую защиту от этой возможности. – user113716
Вы правы, добавили условие базового регистра. –
Björn - К сожалению, с вашим изменением теперь будет возвращено значение 'x' 100% времени. Вы никогда не получите второй оператор return, потому что 'isNaN (value)' всегда будет оценивать значение 'true'. Причиной этого является то, что когда 'margin-top' имеет значение, параметр' value' даст размер в 'px' (например,' 10px'), который не является числом. – user113716