2011-06-17 61 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");