-
Notifications
You must be signed in to change notification settings - Fork 0
/
jquery.mk_styleAdjust_tableInnerBoxHeight.js
107 lines (79 loc) · 3.67 KB
/
jquery.mk_styleAdjust_tableInnerBoxHeight.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
;/* $.mk_styleAdjust_tableInnerBoxHeight
****************************************************************************
/////////////////////////////////////////////////////////////////////////
@varsion : 1.0
@requiers : jquery.js
@author : http://www.makinokobo.com - oosugi
@last update : 2010.10.29 - oosugi
@Copyright : Copyright (c) 2010 Skill Partners Inc. All Rights Reserved.
/////////////////////////////////////////////////////////////////////////
table の th や td 内に div 等で背景処理などのためにボックスを入れたときに、
それらの高さを列ごとに揃えるプラグイン。
また、thやtdに指定したvertical-alignをpadding-topで調整することで実現。
****************************************************************************/
(function($){
// imgを内包するときは $(window).load(function(){ }); に変更
$(function(){
// 対象にしたいテーブルの「行」を選択
// =================================================================
$('div.prt-table02 > table > thead > tr','#contents')
// -----------------------------------------------------------------
// 【注意】
// -----------------------------------------------------------------
// 1. 「>」を使って選択しないと入れ子になった table にも反映されてしまう。
// 2. 「thead」や「tbody」は、HTML上記載していなくても、
// ブラウザ側であるものとして解釈するので、必ず記載する。
// 3. 高さを揃えたいボックスの padding-top と padding-bottom が
// 列ごとに違う場合には未対応。
// =================================================================
.mk_styleAdjust_tableInnerBoxHeight({
// 高さを揃えたいボックスを選択
// =================================================================
innerBox: 'th > span'
// =================================================================
});
});
$.fn.mk_styleAdjust_tableInnerBoxHeight = function(config){
config = $.extend({},$.mk_styleAdjust_tableInnerBoxHeight.defaults,config);
return this.each(function(){
var $innerBox = $(this).find(config.innerBox);
var PT = Number($innerBox.css('padding-top').replace('px',''));
var PB = Number($innerBox.css('padding-bottom').replace('px',''));
var $parent = $innerBox.closest('th,td');
var parentH = $parent.height();
var parentPT = Number($parent.css('padding-top').replace('px',''));
var innerBoxSetH = parentH - PT - PB;
// vertical-align が top 以外が入っているか判定
var VAjudge = [];
$innerBox.each(function(){
var VA = $(this).closest('th,td').css('vertical-align');
VAjudge.push(VA);
});
// 入っている時だけ各$innerBoxそれぞれに対し調整して実行
if($.inArray('middle',VAjudge)!=(-1) || $.inArray('bottom',VAjudge)!=(-1)){
$innerBox.each(function(){
var VA = $(this).closest('th,td').css('vertical-align');
var innerBoxH = $(this).outerHeight();
var VAP;
if(VA == 'middle'){
VAP = (parentH - innerBoxH)/2 + parentPT + PT;
}else if(VA == 'bottom'){
VAP = parentH - innerBoxH + parentPT + PT;
}
$(this)
.height(innerBoxSetH-VAP+PT) // PTは1回引いてるので2重に引くことになっちゃうから足しておく
.css('padding-top',VAP+'px');
});
// 入って無ければ$innerBox全体に対し実行
}else{
$innerBox.height(innerBoxSetH);
}
});
};
$.mk_styleAdjust_tableInnerBoxHeight = {
version: 1.0,
defaults: {
innerBox: 'th > div, td > div'
}
};
})(jQuery);