Javascript JQuery可以在隐藏的DOM对象上使用每个函数吗?
我试图在菜单中找到所有“li”元素的总外部宽度,但我的代码似乎不起作用,所以我想知道是不是因为父UL元素设置为不显示 如果是这样的话,如何解决这个问题Javascript JQuery可以在隐藏的DOM对象上使用每个函数吗?,javascript,Javascript,我试图在菜单中找到所有“li”元素的总外部宽度,但我的代码似乎不起作用,所以我想知道是不是因为父UL元素设置为不显示 如果是这样的话,如何解决这个问题 <ul> <li>menu item 1</li> <li>menu item 2<ul> <li>sub menu item 1</li> <li>sub menu item 2</li> </ul><
<ul>
<li>menu item 1</li>
<li>menu item 2<ul>
<li>sub menu item 1</li>
<li>sub menu item 2</li>
</ul></li>
</ul>
当我提醒这一点时,它总是零…无论如何,你可以从中摆脱出来…:
var totalWidth = 0;
jQuery("ul ul").show();
jQuery("ul ul li").each(function() {
totalWidth += jQuery(this).outerWidth();
});
jQuery("ul ul").hide();
alert(totalWidth);
不确定您是否隐藏了ul
选择器,但看到了系统
一些CSS黑客可能:
聊天后:
解决方案是将空白处:无代码>和。。。见:
带<代码>浮动:左代码>
--- PARENT ---------------------
|------------------------ |
| elem1 | elem2 | |
| | | |
| | | |
-------------------------
elem3 |
|
|
-------------
使用显示:内联块代码>
--- PARENT ---------------------
|-------------------------------|---
| elem1 | elem2 |elem3 | |
| | | | |
| | | | |
------------------------------------
问题不在于枚举,而在于outerWidth对所有枚举元素都返回零,因为它们不显示
如果您可以更改隐藏UL元素的方式,以使用可见性:隐藏
而不是显示:无
,则outerWidth应返回实际宽度,这将解决您的问题。此函数用于什么?您可以使用类似top:99999px的方法将菜单项定位在屏幕外,这样用户就看不到它,而是将其隐藏起来。通过这样做,jquery可以选择宽度。悬停事件的一部分是设置/删除顶部样式,使其按预期定位。Hmmm不确定这是否是最好的方法…因为加载时会有一个打开的菜单闪烁…我不确定我的问题是否正确,即jQuery是否无法确定隐藏元素的宽度。好的,抱歉。你以为评论里还写了什么?您可以使用$(选择器)循环抛出隐藏元素。每个,但无法计算隐藏元素的宽度()
或外径()
。另一种破解方法。就是把你的列表移动到左边,计算x像素,然后再重新放置。Thx是解决方案,但也许我应该提到我为什么要这么做。我希望子菜单在悬停时从左到右延伸,而不是垂直上下……因此我将子Li元素设置为浮动:左,但有趣的是,在第二项之后,第三项将下降到第一项下方,即使Li设置为浮动:左……这迫使我显式地在父UL上设置一个有效的宽度。但是,它现在变成非动态的,因为如果我的菜单项更少,那么我必须再次更改UL宽度…明白我的意思吗?也许有更好的CSS方法?认为我们可以使用CSS:This:OR或者因为它们被隐藏而不选择它们,或者因为它们被隐藏而宽度为0。尝试使用字符串并在each中添加jQuery(this).text(),然后发出警报。如果它仍然是空的,我建议AndreasAL的解决方案如下。如果不是空的,我建议AndreasAL的解决方案如下。
--- PARENT ---------------------
|-------------------------------|---
| elem1 | elem2 |elem3 | |
| | | | |
| | | | |
------------------------------------