Если вы поместите addClass()
в setTimeout()
с задержкой в одну миллисекунду, это также вызовет переход:
var $box1 = $('<div class="box">').appendTo($('body'));;
var $box2 = $('<div class="box">').appendTo($('body'));;
setTimeout(function() {
$box1.addClass('green');
$box1.width();
$box2.addClass('green');
}, 1);
http://jsfiddle.net/pGZFN/4/
Однако, если вы добавите класс green
в любой из блоков, прежде чем он будет добавлен в DOM, переход не произойдет:
var $box2 = $('<div class="box green">').appendTo($('body'));;
http://jsfiddle.net/pGZFN/5/
Это заставляет меня заподозрить, что не какой-то конкретный метод расчета инициирует переход, а скорее микро-задержка, вызванная этим методом. Возможно, вы столкнулись с расой, когда класс добавляется до того, как div полностью добавлен в DOM.
В любом случае, я бы сказал, что самый безопасный способ предотвратить ваш переход - это сделать именно это - добавить класс к элементу до его добавления в DOM, вместо использования addClass()
для этого позже.