如何获取隐藏元素的宽度(在css样式中设置)?
的CSS:
a{
position: absolute;
width: 40px;
height: 40px;
background: pink;
}
JS:
var nav = $('.nav');
nav.hide();
nav.hover(function(){
nav.stop().animate({opacity: 1}, 300);
}, function(){
nav.stop().animate({opacity: 0}, 500);
});
$('<a>', {
css: { left: 940 / 2 - ($(this).width() / 2), // <-- here it seems to be 0
click: function(){
alert($(this).width()); // here it works
return false;
}
}).appendTo(nav);
答案 0 :(得分:3)
这可能是不可能的,因为$(this)
在这种情况下引用window
对象而不是<a>
元素。只有在函数的上下文中调用时,this
引用才会正确绑定到新创建的元素。
可能有一种方法可以使用闭包将元素注入this
但我无法弄清楚如何 - 有兴趣看看是否有人可以提出解决方案。
在此之前,这种替代方案不那么优雅,但始终有效:
mylink = $('<a>', {
id: 'test',
click: function(){
alert($(this).width()); // here it works
return false;
}
}).appendTo($("body")).html("Test");;
mylink.css({ left: mylink.width() / 2});
答案 1 :(得分:1)
- 假设您需要.nav元素的宽度(已隐藏的元素)。
因为你正在使用$('<a>')
,所以你实际上正在创建一个锚标记,在这种情况下,$(this)将引用锚元素而不是.nav元素,因此它的宽度将为0。
如果你想获得.nav元素的宽度你可以使用
$('.nav').width();
这将获得匹配元素的宽度。
答案 2 :(得分:1)
请试试这个:
$('a').click(function(){
$(this).appendTo(nav);
alert($(this).width());
$(this).css('left', ($(this).width() / 2));
return false;
})