JQuery Как получить маржу элемента и заполнение?
Просто интересно - как с помощью jQuery - я могу получить отформатированное общее количество элементов и полей и т.д.? то есть 30px 30px 30px 30px или 30px 5px 15px 30px и т.д.
Я пробовал
var margT = jQuery('img').css('margin');
var bordT = jQuery('img').css('border');
var paddT = jQuery('img').css('padding');
Но это не работает? http://jsfiddle.net/q7Mra/
Ответы
Ответ 1
Согласно документации jQuery, сокращенные CSS-свойства не поддерживаются.
В зависимости от того, что вы подразумеваете под "полным заполнением", вы можете сделать что-то вроде этого:
var $img = $('img');
var paddT = $img.css('padding-top') + ' ' + $img.css('padding-right') + ' ' + $img.css('padding-bottom') + ' ' + $img.css('padding-left');
Ответ 2
var bordT = $('img').outerWidth() - $('img').innerWidth();
var paddT = $('img').innerWidth() - $('img').width();
var margT = $('img').outerWidth(true) - $('img').outerWidth();
var formattedBord = bordT + 'px';
var formattedPadd = paddT + 'px';
var formattedMarg = margT + 'px';
Проверьте документы API jQuery для информации по каждому из них:
Здесь отредактированный jsFiddle показывает результат.
Вы можете выполнять один и тот же тип операций для высоты, чтобы получить ее маржу, границу и дополнение.
Ответ 3
jQuery.css()
возвращает размеры в пикселях, даже если сам CSS указывает их в em или в процентах или что-то еще. Он добавляет единицы ('px'), но тем не менее вы можете использовать parseInt()
для преобразования их в целые числа (или parseFloat()
, для которых важны доли пикселей).
http://jsfiddle.net/BXnXJ/
$(document).ready(function () {
var $h1 = $('h1');
console.log($h1);
$h1.after($('<div>Padding-top: ' + parseInt($h1.css('padding-top')) + '</div>'));
$h1.after($('<div>Margin-top: ' + parseInt($h1.css('margin-top')) + '</div>'));
});
Ответ 4
Граница
Я считаю, что вы можете получить ширину границы с помощью .css('border-left-width')
. Вы также можете выбрать верх, правый и нижний и сравнить их, чтобы найти максимальное значение. Ключевым моментом здесь является то, что вы должны указать конкретную сторону.
Перетяжка
См. jQuery вычисляет padding-top как целое число в px
Margin
Используйте ту же логику, что и граница или дополнение.
В качестве альтернативы вы можете использовать outerWidth. Псевдокод должен быть margin = (outerWidth(true) - outerWidth(false)) / 2
. Обратите внимание, что это работает только для поиска поля по горизонтали. Чтобы найти край по вертикали, вам нужно будет использовать outerHeight.
Ответ 5
Это работает для меня:
var tP = $("img").css("padding").split(" ");
var Padding = {
Top: tP[0] != null ? parseInt(tP[0]) : 0,
Right: tP[1] != null ? parseInt(tP[1]) : (tP[0] != null ? parseInt(tP[0]) : 0),
Bottom: tP[2] != null ? parseInt(tP[2]) : (tP[0] != null ? parseInt(tP[0]) : 0),
Left: tP[3] != null ? parseInt(tP[3]) : (tP[1] != null ? parseInt(tP[1]) : (tP[0] != null ? parseInt(tP[0]) : 0))
};
Пример результата:
Object {Top: 5, Right: 8, Bottom: 5, Left: 8}
Чтобы сделать общее количество:
var TotalPadding = Padding.Top + Padding.Right + Padding.Bottom + Padding.Left;
Ответ 6
Если элемент, который вы анализируете, не имеет какого-либо поля, границы или вообще не определен, вы не сможете его вернуть. На вершинах вы сможете получить "авто", который обычно является значением по умолчанию.
В вашем примере я вижу, что у вас есть margT
как переменная. Не уверен, пытаюсь ли получить маржу. Если в этом случае вы должны использовать .css('margin-top')
.
Вы также пытаетесь получить стилизацию из "img", которая приведет (если у вас более одного) в массиве.
Что вам нужно сделать, это использовать метод .each()
jquery.
Например:
jQuery('img').each(function() {
// get margin top
var margT = jQuery(this).css('margin-top');
// Do something with margT
});
Ответ 7
$('img').margin() or $('img').padding()
Возврат:
{bottom: 10 ,left: 4 ,top: 0 ,right: 5}
получить значение:
$('img').margin().top
Edit:
использовать плагин jquery: jquery.sizes.js