jQuery - $(this).width()在隐藏元素时不起作用
jQuery - $(this).width() doesn't work if the element is hidden!
如何获得隐藏元素的宽度(在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);
这可能是不可能的,因为$(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});
JSFiddle
-假设您想要的是。nav元素(已隐藏的元素)的宽度。
因为你使用的是$('<a>')
,你实际上是在创建一个锚标签,在这种情况下,$(this)将指向锚元素,而不是。nav元素,所以它的宽度是0。
如果你想获得。nav元素的宽度,你可以使用
$('.nav').width();
,这将得到你匹配元素的宽度
请试试:
$('a').click(function(){
$(this).appendTo(nav);
alert($(this).width());
$(this).css('left', ($(this).width() / 2));
return false;
})
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- JavaScript-在手机上不工作的情况下,在外部单击时隐藏元素
- 随时隐藏元素
- 根据特定条件使用ng显示/ng隐藏来显示/隐藏元素
- 隐藏元素直到加载完成(ng斗篷不是我需要的)
- 在具有类的元素中隐藏元素
- javascript()onclick隐藏元素-dos'我不在firefox工作
- JQueryHide()在按钮中使用元素时不会隐藏元素
- 使用Javascript取消隐藏元素
- 如果鼠标离开父对象,则隐藏元素
- 如何在jquery ajax成功html响应中找到输入隐藏元素
- 基于事件在循环中隐藏元素
- 渐进式增强-不使用CSS隐藏元素
- 隐藏元素后更新滚动条
- jQuery没有隐藏元素
- jQuery隐藏元素在使用CSS显示时保持隐藏状态
- 如何使用javascript在区域外单击时隐藏元素
- 如何在加载网页时隐藏元素
- JS:隐藏元素上的事件侦听器
- HTML 显示/隐藏元素 JS 不起作用