参考如下:
<input type="text">
<div id="divShow" style="display:noneposition:absolute">显示的内容;</div>
display:none,表示此层隐藏;
position:absolute,表示此层的为绝对位置,方便后期进行绝对定位
添加事件,完成效果;
<script type="text/javascript">
function showDiv(obj) {
// 保存元素;
var el = obj
// 获得元素的左偏移量;
var left = obj.offsetLeft
// 获得元素的顶端偏移量;
var top = obj.offsetTop
// 循环获得元素的父级控件,累加左和顶端偏移量;
while (obj = obj.offsetParent) {
left += obj.offsetLeft
top += obj.offsetTop
}
// 设置层的坐标并显示;
document.all.divShow.style.pixelLeft = left
// 层的顶端距离为元素的顶端距离加上元素的高;
document.all.divShow.style.pixelTop = top + el.offsetHeight
document.all.divShow.style.display = "block"
}
</script>
<style>
#divShow
{
width:150px
height:180px
border-width:thin
background:yellow
}
</style>
<input type="text" onfocus="showDiv(this)">
<div id="divShow" style="display:noneposition:absolute">显示的内容;</div>
注意:
offsetLeft和OffsetTop不是获得元素和页面的距离,只是获得元素和父元素的的距离,所以要进行while循环一层层累加距离,最后得到元素和页面之间的距离
层次关系:本元素->父元素->……>body->null,当为null时,退出while循环。
最终效果如下:
可以,用创建和插入元素<!DOCTYPE html>
<html>
<head>
<title>New Document </title>
<meta charset="utf-8" />
<style>
div {border: 1px solid #666padding: 5pxmargin: 5px}
#divs {width: 200px}
#div5 {background: #ccc}
</style>
</head>
<body>
<div id="divs">
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3">div3</div>
<div id="div4">div4</div>
</div>
<script>
var oDivs=document.getElementById('divs')
var oDiv3=document.getElementById('div3')//获取到div3,因为等下要把创建的div插入到div3前面。
var oDiv5=document.createElement('div')//创建一个div元素。
oDiv5.id='div5'//id样式可以先在样式表中写好,然后赋值一个id给创建出来的div元素。
oDiv5.innerHTML='<span>这是被创建出来的div5</span>' //给创建出来的div添加内容,内容中可以有html标签嵌套。
oDivs.insertBefore(oDiv5,oDiv3)//在大的div元素下插入创建出来的元素,第一个参数是创建的div,第二个参数是要插入到哪个div前面。
</script>
</body>
</html>