[Обновить]
Оригинальный ответ был написан до jQuery 1.3, и функции, которые существовали в то время, были не в состоянии сами по себе рассчитать всю ширину.
Теперь, как правильно утверждает JP , в jQuery есть функции externalWidth и outerHeight, которые включают в себя border
и padding
по умолчанию, а также margin
первый аргумент функции iftrue
[Оригинальный ответ]
Для width
метода больше не требуется dimensions
плагин, потому что он был добавлен вjQuery Core
Что вам нужно сделать, это получить значения padding, margin и border этого конкретного div и добавить их к результату width
метода
Что-то вроде этого:
var theDiv = $("#theDiv");
var totalWidth = theDiv.width();
totalWidth += parseInt(theDiv.css("padding-left"), 10) + parseInt(theDiv.css("padding-right"), 10); //Total Padding Width
totalWidth += parseInt(theDiv.css("margin-left"), 10) + parseInt(theDiv.css("margin-right"), 10); //Total Margin Width
totalWidth += parseInt(theDiv.css("borderLeftWidth"), 10) + parseInt(theDiv.css("borderRightWidth"), 10); //Total Border Width
Разбить на несколько строк, чтобы сделать его более читаемым
Таким образом, вы всегда получите правильное вычисленное значение, даже если вы измените значения отступа или поля из CSS
parseInt
s может быть изменен на+
оператор , чтобы сделать код более лаконичным. Таким образом,parseInt(theDiv.css("padding-left"), 10)
можно обратиться к и+theDiv.css("padding-left")
т.д ...Любой другой, спотыкающийся в этом ответе, должен заметить, что jQuery сейчас (> = 1.3) имеет
outerHeight
/outerWidth
функции для получения ширины, включая отступы / границы, напримерЧтобы включить маржу, просто передайте
true
:источник
похоже, что externalWidth не работает в последней версии jquery.
Расхождение происходит, когда
внешний div плавает, внутренний div имеет установленную ширину (меньше, чем внешний div), внутренний div имеет style = "margin: auto"
источник
Просто для простоты я инкапсулировал отличный ответ Андреаса Греча выше в некоторых функциях. Для тех, кто хочет немного счастья.
источник
те же браузеры могут возвращать строку для ширины границы, в этом parseInt будет возвращать NaN, поэтому убедитесь, что вы правильно проанализировали значение int.
источник
источник