Вы не сказали нам, в чем проблема, но:
Вы сказали, что код работает (если это так, он не будет надежным; см. Ниже) , если вы поместите разметку в HTML, но не если вы добавите эту разметку с помощью кода. Код, который вы процитировали, не будет иметь этой проблемы, потому что он ясно показывает, что вы добавляете и затем выполняете поиск элементов ".image", но вы должны быть уверены, что вы do делаете добавление до вы запускаете другой код, и вам нужно сделать это, как только к тегу body
будет добавлено что-то. Либо убедитесь, что ваш скрипт находится в самом конце, сразу после (или перед) закрывающего тега </body>
, либо используйте функцию jQuery ready
(или ее ярлык ).
Отдельно:
Функция jQuery css
не поддерживает сокращенные свойства, хотя они работают в некоторых браузерах. За документы :
Сокращенные свойства CSS (например, поля, фон, граница) не поддерживаются. Например, если вы хотите получить обработанное поле, используйте: $(elem).css('marginTop')
и $(elem).css('marginRight')
и т. Д.
Итак, эта строка:
$(this).css({'margin':margin_top+'px 0 0 '+ margin_left +'px'})
Должно быть
$(this).css({
marginTop: margin_top + 'px',
marginLeft: margin_left + 'px',
marginRight: "0px",
marginBottom: "0px"
});
Отдельно обратите внимание, что каждый раз вы делаете $(this)
, для этого требуется несколько вызовов функций и выделение памяти. Лучше не повторять это без необходимости; хотя обычно он безвреден, он создает ненужный отток памяти. Просто поставьте var $this = $(this);
в начале вашей функции и затем используйте $this
во всем (или как угодно, как хотите). (Есть один момент: обязательно помните, что this
меняет [потенциально] в каждой функции, поэтому, если вы настраиваете обработчики событий, не используйте внешнюю функцию $this
там, где вы хотите использовать версию обработчика событий .)