簡體   English   中英

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 object 而不是<a>元素。 只有在 function 的上下文中調用時, 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;
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM