定位父元素,使子元素处于完全相同的位置
Positioning parent element so child is in exact same position
我正试图在JS中实现一个下拉列表。我有一个div容器,里面有很多项目。我想把它变成一个下拉列表,这样当点击下拉列表打开时,当前选择的项目将完全保持在同一个位置,其他项目将显示在它的上方和下方。
我从这个结构开始:
<div>this is some random paragraph of text or any other content where dropdown will be positioned
<div class="dropdown"><ul>
<li>aaaaa</li>
<li class="selected">b fdfb</li>
<li>cccc</li>
<li>dd</li>
<li>cccc</li>
<li>eee</li>
<li>ffff</li>
<li>gggg</li>
<li>hh</li>
<li>iiiii ii</li>
</ul>
</div>
and this is more
</div>
只有一个项目显示在某个地方,例如文本段落内。我遇到的问题是,当下拉列表打开时,我发现很难匹配div.dropdown的位置(与所有子项一起显示),因此当前选择的项目将完全位于同一位置。
我该如何最好地处理这个问题?
编辑:在这里创建Fiddle,因为这可能会让你更好地了解我在之后的想法
这里似乎有一些问题:
- 当下拉列表打开时,它将比其父容器中的文本占据更多的垂直空间。这意味着它在打开时会发生移动,因为父对象的线高度对于展开的下拉列表来说不够大。将父
<div>
的line-height
设置为更大的值(如1.5em左右)以解决此问题 - 水平宽度不稳定,因为文本值的长度不同。当选择不同长度的项目时,您需要将所有项目设置为相同的宽度,以防止右侧的文本移位
- 选择下拉菜单时,文本下移2个像素。这可能是一些正在应用的浏览器样式的副产品。更改线路:
t = liTop - Math.ceil(this.$ul.offset().top) + 15;
至
t = liTop - Math.ceil(this.$ul.offset().top) + 17;
修复了此问题。
以下是更新后的Fiddle:http://jsfiddle.net/vvz1dx31/5/-在Chrome 40、IE 11和FF 36中进行测试。
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 我可以获得相对于被点击元素的确切点击位置吗
- 完全可链接的li元素
- 将jQuery事件应用于所有类元素
- Javascript元素相对于屏幕的位置
- 如果元素在容器外部,是否可以相对于容器以绝对定位来定位该元素
- 如何在iframe中找到与页面上的元素完全相同的元素
- jQuery appendTo 替换元素而不是添加元素,如果正在添加的元素预先存在于列表中
- 动画功能不应用于每个元素
- 正在获取单击的元素相对于整个文档的索引
- 制作 JavaScript 代码适用于任何元素
- 将jquery函数动态应用于添加的元素
- 如何使用javascript检查事件是否应用于元素
- 在调整大小和加载时移动 DOM 元素.仅适用于调整大小
- 每次在动画之后完全删除该元素.- 仅使用 CSS
- 定位父元素,使子元素处于完全相同的位置
- 我怎么知道当视频在元素已完全加载
- 在文档中的所有元素都完全加载后,触发JS事件的最可靠方法是什么?
- 如何发现如果html元素被完全加载
- jQuery/js:通过点击dom中的元素,完全从js中删除对象