2013-11-16 3 views
2

Следующие 2 фрагмента кода производят очень разные результаты:Селекторы JavaScript и jQuery дают разные результаты?

Это работает как предполагается: оно увеличивает значение progressbar (ширина) на 5 в секунду.

function doIncrement(increment) { 
    w = parseInt(document.getElementById('internal-progressbar').style.width); 
    document.getElementById('internal-progressbar').style.width = (w + increment) + '%'; 
    if (parseInt(document.getElementById('internal-progressbar').style.width) < 100) 
    { 
     setTimeout(function() { doIncrement(increment) }, 1000); 
    } 
} 

Этот (getelementbyid заменен селекторами jquery) дает совершенно другой результат. Он начинается с увеличения на 5, но затем он увеличивается на 34, а затем еще больше.

function doIncrement(increment) { 
    w = parseInt($('#internal-progressbar').css('width')); 
    $('#internal-progressbar').css('width', (w + increment) + '%'); 
    if (parseInt(document.getElementById('internal-progressbar').style.width) < 100) 
    { 
     setTimeout(function() { doIncrement(increment) }, 1000); 
    } 
} 

В чем причина этой разницы? Я действительно не понимаю.

Вот jsfiddle, который демонстрирует проблему: http://jsfiddle.net/k79Ph/

+0

Вы пытались добавить 'console.log (w)', чтобы узнать, что возвращается? – Pointy

+0

Существуют ли они в одном объеме? Разница сохраняется, если вы правильно объявляете 'w' как' var w = parseInt ... '? – lonesomeday

+2

сделайте скрипку. –

ответ

4

Проблема заключается в том, что css('width') возвращает абсолютный размер (в пикселях), в то время как style.width является «сырой» значение (в процентах). This thread должны помочь вам.

+0

Ahh Я вижу - спасибо! –

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