我遇到元素定位问题。我有一个div元素,它进一步包含svg路径元素。标记是这样的:
<div style="position:absolute;" class="svg">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<path id="path203" d="M150 0 L75 200 L225 200 Z" />
</svg>
</div>
我想在用户鼠标悬停路径时设置路径元素周围的边框。为此,我必须访问path元素的高度和权重,然后将这些值设置为其父div元素的高度和宽度。为此,我使用了getBoundingClientRect()。代码:
var box = document.getElementById("path203").getBoundingClientRect();
$("#path203").parents("div.svg").css({ width: box.width + "px", height: box.height + "px" });
这里我的问题没有完全解决,我只得到边框,但div的位置和它的子路径元素不一样都有不同的偏移值。因此,我为父div设置了顶部和左侧:
var box = document.getElementById("path203").getBoundingClientRect();
$("#path203").parents("div.svg").offset({ left: box.left + "px", top: box.top });
现在这个div得到了正确的位置,但是它的子路径元素远离它的位置。可能是因为path元素是div元素的子元素。因此,当我们移动div时,它的所有子元素也将同时移动。如何更改父div偏移值而不更改其子元素偏移量?
答案 0 :(得分:0)
这是你想要实现的目标吗?
<div style="position:absolute;" class="svg">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="302" height="202">
<path id="path203" d="M150 0 L75 200 L225 200 Z" onmouseover="showRect()" onmouseout="hideRect()" />
<rect id="border203" fill="none" stroke="black" stroke-width="1"/>
<script>
function showRect() {
var bbox = document.getElementById("path203").getBBox();
var border = document.getElementById("border203");
border.x.baseVal.value = bbox.x;
border.y.baseVal.value = bbox.y;
border.width.baseVal.value = bbox.width;
border.height.baseVal.value = bbox.height;
}
function hideRect() {
var border = document.getElementById("border203");
border.width.baseVal.value = 0;
border.height.baseVal.value = 0;
}
</script>
</svg>
</div>
答案 1 :(得分:0)
您可以将svg带到父div之外,并通过$('div.svg')
直接访问div。
这是一个小提琴:http://jsfiddle.net/FSQrz/