2011-12-14 4 views
1

Так что я просто играл с моим jquery и застрял с довольно странной проблемой. поэтому я получаю ширину DIV как этотJQuery с использованием функции css

block_width = $(".grid_block").css("width"); 

Теперь я хотел бы сделать что-то с этой шириной скажем

container_width = block_width * 21; 

и теперь, если бы предупредить container_width я хотел бы получить Nah InstEd чисел, Что я делаю не так?

ответ

4

То же самое я сделал с width()

var block_width = $(".grid_block").width(); 
var container_width = block_width * 21; 
alert(container_width) 

Try this Fiddle

+1

@ Linas, вы можете попробовать эту скрипку. обновлено как http://jsfiddle.net/XwayB/3/ –

5

Вы получаете NaN вместо цифр, так как значение ширины вы получаете будет строка, включая единицы

IE:

"500px" 
"3em" 
"27.2%" 

Вы могли разобрать число с parseInt

width = ...css('width'); 
width = parseInt(width); 

Но это совершенно не нужно, потому что у jQuery есть width method.

width = ...width(); //numeric value 
0

Это потому, что block_width имеет тип int;

block_width = intParse($(".grid_block").css("width").replace('px')); 
    container_width = block_width * 21 

или событие лучше

block_width = $(".grid_block").width(); 
container_width = block_width * 21 
5

.css("width") возвращает строку, представляющую ширину, с "px" прилагаемую, т.е. "___px". Умножение этой строки с некоторым числом сбой ("12px" * 2 оценивается как NaN).

Чтобы получить ширину, вы можете посмотреть функции .width(), а .width(x) - установить ширину (как числа).

1

Вы назначая строку как часть операции по математике ...

Попробуйте это:

block_width = parseInt($(".grid_block").css("width")); 
1

Ваш CSS («Ширина») возвращает строку, а не число. Преобразуйте его с помощью parseInt/parseFloat или используйте функцию jquery .width() (которая возвращает число).

+0

hmm Это странно, потому что если я попытаюсь предупредить block_width, я бы получил числа, так или иначе спасибо за быстрый ответ. – Linas

+0

Вы можете проверить 'typeof (block_width)', это строка, если вы запрашиваете метод css. –

1

Снимите точки с конца и сделать ParseInt до вашего умножения

block_width = block_width.replace("px", "") 
container_width = parseInt(block_width) * 21; 
1

Вы должны использовать ширину JQuery (). Разница между .css (width) и .width() заключается в том, что последний возвращает значение пикселя без единицы (например, 400), в то время как первое возвращает значение с единицами нетронутыми (например, 400 пикселей). Пожалуйста, проверьте http://api.jquery.com/width/ Не нужно разбирать парсинг для получения ширины, как предлагают другие сообщения.

0

Hy, Я столкнулся с той же проблемой. .css("width") возвращает «20px», например. То, что я сделал, что уверен, что немного странно, и вы, вероятно, может решить эту проблему с регулярным выражением, но то, что я сделал:

var newWidth = parseInt(($('something').css("width")).split("px")[0])+xx;//xx... Size you want to add 
$('something').css("width",newWidth); 

Я имею в виду вы могли бы, чтобы все в одной строке и без инициализации новой переменной, но если кто-то хочет чтобы читать ваш код и не в jquery или javascript, я думаю, что лучше его разделить. Надеюсь, это вам поможет!

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