2011-06-17 65 views
5

如何在添加元素之前獲得css屬性?在append()之前獲取css()屬性?

CSS

input.inp { 
    padding:3px 2px 3px 2px; 
} 

JS

var elm = $('<input class="inp" type="text" />'); 

alert(elm.css('padding-left')); 
td.append(elm); 
alert(elm.css('padding-left')); 

只有第二警報retuns值...

我想輸入元素具有寬度:100%..但因爲你不能這樣做(當輸入有自己的填充)我需要設置像素的寬度

  1. 其中輸入了要追加對TD的get寬度...
  2. 獲得輸入
  3. 的左右填充追加輸入到TD與TD的寬度減去左右INPUT的填充
+0

嗨,我可以知道什麼是知道el之前填充的範圍。被追加?如果您解釋您的想法或需求,我們可以幫助您找到解決方法。 – 2011-06-17 11:37:45

+0

問題編輯... – clarkk 2011-06-17 13:27:16

+0

我還是不明白....嘗試創建一個http://jsfiddle.net/ – 2011-06-17 13:29:06

回答

0

你可以插入一個隱藏的輸入,用類,得到的CSS屬性和使用它們。

<input id="getPadding" class="inp" type="text" style="display:none" /> 

然後該元件被所附後,可以只得到的元素的父寬度,然後設置輸入到寬度減去填充量。像這樣

$('td input').width($(this).parent().width() - [$('#getPadding').css('padding-left') + $('#getPadding').css('padding-right')]) 

替代地有一個CSS唯一的解決方案,但它不能在IE7和以下工作

td input { 
    margin: 0px; 
    width: 100%; 
    height: 100%; 
    border: 0px; 
    display: block; 
    padding: 2px 5px; 
    -moz-box-sizing: border-box; 
    -ms-box-sizing: border-box; 
    -webkit-box-sizing: border-box; 
    box-sizing: border-box; 
} 
2

如果它不在DOM中,那麼你不能,AFAIK。

1

可能是因爲填充位於樣式表中,它取決於css應用於元素的文檔中的位置。所以當這個元素沒有到位時,它還沒有那種樣式。至少它必須是DOM的一部分,並且(取決於css選擇器),DOM中的確切位置也可能很重要。

-1
var padbefore = $("elmid").css('padding-left'); 
alert(padbefore); 
$("td").append('elmid'); 
var paddafter = $("elmid").css('padding-left'); 
alert(paddafter); 
0

當你這樣做:

$('<input class="inp" type="text" />'); 

是一樣的做:

var input = document.createElement("input"); 
input.type = "text"; 
input.className = "inp"; 

而在這兩種情況下,他們返回一個獨立式元素。

由於元素尚未附加到DOM,但class不起作用,所以將no Css應用於該元素。

所以當你試圖獲得填充它不會被設置。

你將不得不填充內嵌添加到能夠得到它,你將它添加之前將DOM

$('<input class="inp" type="text" />').css("padding", "5px");