jQueryを使用した整数としてのピクセル単位のパディングまたはマージン値


207

jQueryには、高さまたは幅をピクセル単位で整数として返すheight()en width()関数があります...

jQueryを使用して要素のパディングまたはマージン値をピクセル単位および整数として取得するにはどうすればよいですか?

私の最初のアイデアは次のことをすることでした:

var padding = parseInt(jQuery("myId").css("padding-top"));

しかし、たとえばemsでパディングが指定されている場合、値をピクセルで取得するにはどうすればよいですか?


Chris Pebbleによって提案されたJSizesプラグインを調べたところ、自分のバージョンが正しいバージョンであることがわかりました:)。jQueryは常にピクセル単位の値を返すため、それを整数に解析するだけで解決しました。

クリス・ペブルとイアン・ロビンソンのおかげで


以下の回答の中から1つ選んでください。
Wesモード

4
このスレッドの人々への注記:を使用するときは常に基数を指定してくださいparseInt。引用MDN: " radix上記の文字列の基数(数学数値システムの基数)を表す2〜36の整数。10進数システムには10を指定します。読者の混乱を防ぎ、予測可能な動作を保証するために、常にこのパラメータを指定してください。。基数が指定されていない場合、実装が異なると結果も異なります。通常、デフォルト値は10です。」参照:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...を
dgellow

回答:


226

CSSを使用できるはずです(http://docs.jquery.com/CSS/css#name)。「padding-left」や「margin-top」など、より具体的にする必要がある場合があります。

例:

CSS

a, a:link, a:hover, a:visited, a:active {color:black;margin-top:10px;text-decoration: none;}

JS

$("a").css("margin-top");

結果は10pxです。

整数値を取得する場合は、次の操作を実行できます。

parseInt($("a").css("margin-top"))

5
jQueryメソッドが実際に「px」サフィックスを返すかどうかを確認していませんがJSizes、戻り値がに渡されるとParseInt(...)、他の回答のプラグイン(私が最終的に使用したもの)は整数を返します。
ダンハーバート

12
FYI:jQueryのは、イアンのソリューション作品ので、「PX」を追加しとのparseInt()に渡されたときにも、整数を返します-そしてそれは、プラグインを必要としません:parseInt($('a').css('margin-top').replace('px', ''))
ピーター・ラスト

56
parseIntは、chrome jsperf.com/replace-vs-parseint
Bank

17
CSSでパディング/マージンがemまたはptとして表現されて.css()いる場合でも、最後に「px」が付いた値を返しますか?
原料

22
@ ingredient_15939-試してみて、はい; 実際のピクセル値を計算し、pxで返します。ボーダーの幅も同じです。古い質問ですが、誰もあなたの質問に答えなかったので、他の
遅発

79

外側と内側の高さ/幅を比較して、合計マージンとパディングを取得します。

var that = $("#myId");
alert(that.outerHeight(true) - that.innerHeight());

素晴らしいヒント!助けてくれた
安部ペトリロ

1
私はouterHeight Existedに気づきませんでした。どうもありがとうございました!
AlexMorley-Finch

6
outerWidthの/身長があまりにもかかわらず、境界線の幅が含まれていることを忘れないでください
electrichead

7
innertWidth / innerHeightには計算にパディングも含まれます。パディングなしで幅/高さを取得するには、.width()および.height()を使用する必要があります。api.jquery.com/innerWidth api.jquery.com/width api.jquery.com/outerWidth
Andrew Ensley

2
that.outerHeight(true) - that.outerHeight()outerHeight()はパディングとボーダーを含み、マージンを除外するため、垂直マージンの合計が得られます。api.jquery.com/outerWidth/を参照してください。
Aximili 2014

35

parseInt関数には、変換で使用される数値システムを定義する「基数」パラメーターがあるため、呼び出すとparseInt(jQuery('#something').css('margin-left'), 10);左マージンが整数として返されます。

これはJSizesが使用するものです。


3
このおかげで、機能の小さな部分のためのプラグインを含める必要がありません。
ブライアン

2
あなたも、10にそれ以来、デフォルトは「基数」を渡す必要はありません
アレクサンダー・バード

5
parseIntはNaNを返す可能性があることに注意してください(これにより、その変数に基づいて計算が失敗します)-isNaNチェックを後で追加します!例の場合:parseInt('auto', 10);auto有効ですmargin-left)。
トーマス

@sethAlexanderBird基数はデフォルトで10になると述べたあなたの正解ですが、コードリンティングがあなたにとって重要である場合(そしてそれはおそらくそうであるはずです)、jsLintとjsHintは省略した場合に不快感を与えます。
グレッグ

30

すでにネイティブで利用可能なものを実行するためだけに、別のライブラリをロードしないでください。

jQueryは.css()%とemを最初と同等のピクセルに変換し、返された文字列の末尾からparseInt()を削除'px'して整数に変換します。

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>'));
});

11

周囲の寸法を取得する方法は次のとおりです。

var elem = $('#myId');

var marginTopBottom  = elem.outerHeight(true) - elem.outerHeight();
var marginLeftRight  = elem.outerWidth(true)  - elem.outerWidth();

var borderTopBottom  = elem.outerHeight() - elem.innerHeight();
var borderLeftRight  = elem.outerWidth()  - elem.innerWidth();

var paddingTopBottom  = elem.innerHeight() - elem.height();
var paddingLeftRight  = elem.innerWidth()  - elem.width();

paddingTopBottomたとえば、各変数には要素の両側のマージンの合計が含まれていることに注意してください。すなわち、paddingTopBottom == paddingTop + paddingBottom。別々に入手する方法はあるのでしょうか。もちろん、等しい場合は2で割ります。


true =マージンを含みます。+1000インターネット
グリフ

これはでも機能するため、最適なソリューションIE 7です。参照:stackoverflow.com/questions/590602/…–
Leniel Maccaferri 2014

9

この単純な関数はそれを行います:

$.fn.pixels = function(property) {
    return parseInt(this.css(property).slice(0,-2));
};

使用法:

var padding = $('#myId').pixels('paddingTop');

3
autoinheritおよび%値を考慮していません
Thomas

3
@トーマス:そうではない。jsfiddle.net/nXyFN jQueryは常に結果をピクセル単位で返すようです。
mpen 2012年

4
@Mark jsfiddle.net/BNQ6S IE7 :、NaNブラウザによって異なります。私の知る限りではjQueryのは、正規化しません.css()とは違っ.width().height()
トーマス

1
@トーマス:面白い。Ianのソリューション(最高評価)にも同じ問題があります。svintoのソリューションはおそらく最良です。
mpen 2012年

9

intを解析

parseInt(canvas.css("margin-left")); 

0pxに対して0を返します


9

すべてのCSS属性と同じように、それらを取得できます

alert($("#mybox").css("padding-right"));
alert($("#mybox").css("margin-bottom"));

cssメソッドの2番目の属性でそれらを設定できます。

$("#mybox").css("padding-right", "20px");

編集:ピクセル値だけが必要な場合は、次を使用しますparseInt(val, 10)

parseInt($("#mybox").css("padding-right", "20px"), 10);

3

元の質問に答えるだけでOK:

次のような使用可能な整数としてパディングを取得できます。

var padding = parseInt($( "myId")。css( "padding-top")。replace( "ems"、 ""));

pxのような別の測定を定義している場合は、「ems」を「px」に置き換えてください。parseIntはstringpartを誤った値として解釈するため、それを...何にも置き換えないことが重要です。


2

次のようなものを使用して、jqueryフレームワークを自分で拡張することもできます。

jQuery.fn.margin = function() {
var marginTop = this.outerHeight(true) - this.outerHeight();
var marginLeft = this.outerWidth(true) - this.outerWidth();

return {
    top: marginTop,
    left: marginLeft
}};

それにより、offset関数のようなコレクションを返すmargin()という関数をjqueryオブジェクトに追加します。

fx。

$("#myObject").margin().top

2
残念ながら、これでは上マージンと左マージンが得られず、totalVerticalとtotalHorizo​​ntalのマージンが得られます
コードコマンダー

ただし、他のソリューションのいずれかでparseInt関数を使用して編集し、よりシームレスに表示されるマージン関数を許可することができます
Brian

1

string.replace( "px"、 ""));は使用しないでください。

parseIntまたはparseFloatを使用してください!




0

ネクロではなく、さまざまな値に基づいてピクセルを決定できるようにしました。

$.fn.extend({
  pixels: function (property, base) {
    var value = $(this).css(property);
    var original = value;
    var outer = property.indexOf('left') != -1 || property.indexOf('right') != -1 
      ? $(this).parent().outerWidth()
      : $(this).parent().outerHeight();

    // EM Conversion Factor
    base = base || 16;

    if (value == 'auto' || value == 'inherit') 
        return outer || 0;

    value = value.replace('rem', '');
    value = value.replace('em', '');

    if (value !== original) {
       value = parseFloat(value);
       return value ? base * value : 0;
    }

    value = value.replace('pt', '');

    if (value !== original) {
       value = parseFloat(value);
       return value ? value * 1.333333 : 0; // 1pt = 1.333px
    }

    value = value.replace('%', '');

    if (value !== original) {
      value = parseFloat(value);
      return value ? (outer * value / 100) : 0;
    }

    value = value.replace('px', '');
    return parseFloat(value) || 0;
  }
});

このようにして、サイジングと自動/継承を考慮します。


parseInt()間違っていることに注意してください。幅または高さが浮動小数点になる可能性があります。
Alexis Wilke
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.