Общая ширина элемента (включая заполнение и границу) в jQuery
Как и в теме, как можно получить общую ширину элемента, включая его границу и заполнение, используя jQuery? У меня есть плагин jQuery dimensions и работает .width () на моем 760px-wide, 10px padding DIV возвращает 760.
возможно, я делаю что-то неправильно, но если мой элемент проявляется как 780 пикселей в ширину и Firebug говорит мне, что на нем есть 10px обивка, но вызов .ширина () дает только 760, мне было бы трудно понять, как это сделать.
Спасибо за любую предложения.
6 ответов:
[обновление]
исходный ответ был написан до jQuery 1.3, и функции, которые существовали в то время, когда они не были достаточными сами по себе для вычисления всей ширины.
теперь, как J-P правильно заявляет, jQuery имеет функции outerWidth и outerHeight, которая включает
border
иpadding
по умолчанию, а такжеmargin
если первый аргумент функцииtrue
[оригинальный ответ]
The
width
метод не требуетdimensions
плагин, потому что он был добавлен кjQuery Core
что вам нужно сделать, это получить заполнение, маржу и ширину границы-значения этого конкретного 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
любой другой наткнувшийся на этот ответ должен отметить, что jQuery now (>=1.3) имеет
outerHeight
/outerWidth
функции для получения ширины, включая заполнение / границы, например$(elem).outerWidth(); // Returns the width + padding + borders
чтобы включить маржу, а также, просто пройти
true
:$(elem).outerWidth( true ); // Returns the width + padding + borders + margins
похоже, что outerWidth сломан в последней версии jquery.
несоответствие происходит, когда
внешний div плавает, внутренний div имеет набор ширины (меньше, чем внешний div) внутренний div имеет style= "margin:auto"
просто для простоты я инкапсулировал отличный ответ Андреаса греча выше в некоторых функциях. Для тех, кто хочет немного вырезать-и-вставить счастье.
function getTotalWidthOfObject(object) { if(object == null || object.length == 0) { return 0; } var value = object.width(); value += parseInt(object.css("padding-left"), 10) + parseInt(object.css("padding-right"), 10); //Total Padding Width value += parseInt(object.css("margin-left"), 10) + parseInt(object.css("margin-right"), 10); //Total Margin Width value += parseInt(object.css("borderLeftWidth"), 10) + parseInt(object.css("borderRightWidth"), 10); //Total Border Width return value; } function getTotalHeightOfObject(object) { if(object == null || object.length == 0) { return 0; } var value = object.height(); value += parseInt(object.css("padding-top"), 10) + parseInt(object.css("padding-bottom"), 10); //Total Padding Width value += parseInt(object.css("margin-top"), 10) + parseInt(object.css("margin-bottom"), 10); //Total Margin Width value += parseInt(object.css("borderTopWidth"), 10) + parseInt(object.css("borderBottomWidth"), 10); //Total Border Width return value; }
те же браузеры могут возвращать строку для ширины границы, в этом parseInt вернет NaN поэтому убедитесь, что вы правильно анализируете значение int.
var getInt = function (string) { if (typeof string == "undefined" || string == "") return 0; var tempInt = parseInt(string); if (!(tempInt <= 0 || tempInt > 0)) return 0; return tempInt; } var liWidth = $(this).width(); liWidth += getInt($(this).css("padding-left")); liWidth += getInt($(this).css("padding-right")); liWidth += getInt($(this).css("border-left-width")); liWidth += getInt($(this).css("border-right-width"));
$(document).ready(function(){ $("div.width").append($("div.width").width()+" px"); $("div.innerWidth").append($("div.innerWidth").innerWidth()+" px"); $("div.outerWidth").append($("div.outerWidth").outerWidth()+" px"); }); <div class="width">Width of this div container without including padding is: </div> <div class="innerWidth">width of this div container including padding is: </div> <div class="outerWidth">width of this div container including padding and margin is: </div>