jQuery вычисляет padding-top как целое число в пкс

Единственное решение, которое я нашел, ($(this).innerHeight() - $(this).height()) / 2

Но / 2 не правильная опция, потому что у пользователя могут быть дополнение-top:0px и дополнение-bottom:20px.

Существует ли способ сделать более точные дополнительные значения?

Я думал о css('padding-top') и затем проанализируйте его путем принятия только международного участия, но значение может быть в "них", например, а не в "пкс"

Затем сделайте оператор переключения для каждого типа значения? Для них один, для пкс другой?

Это все немного сложно и занимает больше места в коде...

10
задан Pranay Rana 19 July 2010 в 07:00
поделиться

1 ответ

Одна из основных сильных сторон jQuery состоит в том, что он настолько легко подключаемый, что, если у вас есть потребность, которая не сразу удовлетворяется библиотекой, существует обширный набор подключаемых модулей для поиска. И если нет никого, который делает то, что вы хотите, действительно легко создать свой собственный.
Я думаю, что правильный путь, если вы не можете найти плагин, который делает то, что вы хотите, - это последний путь: написать свой собственный.

Тем не менее, убедитесь, что вы четко представляете себе спецификации вашего плагина. Что он должен вернуть, если у элемента нет настройки css для заполнения? Должен ли он возвращать стиль для этого элемента или вычисленный стиль? Что происходит с недопустимым css (скажем, 'padding-top: 10 unitsThatDontExist;' или 'padding-left: two;')?

Чтобы начать работу - это то, что может выглядеть с использованием вашего собственного плагина как в вашем коде:

var topPadding = $('#anElement').padding('top');

Чтобы сделать это доступным, просто напишите плагин вроде этого:

$.fn.padding(direction) {
    // calculate the values you need, using a switch statement
    // or some other clever solution you figure out

    // this now contains a wrapped set with the element you apply the 
    // function on, and direction should be one of the four strings 'top', 
    // 'right', 'left' or 'bottom'

    // That means you could probably do something like (pseudo code):
    var intPart = this.css('padding-' + direction).getIntegerPart();
    var unit = this.css('padding-' + direction).getUnit();

    switch (unit)
    {
        case 'px':
            return intPart;
        case 'em':
            return ConvertEmToPx(intPart)
        default:
            // Do whatever you feel good about as default action
            // Just make sure you return a value on each code path
    }
};
11
ответ дан 3 December 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: