从SVG文件调用javascript函数
我有SVG文件,它由多个链接组成。一旦用户点击链接,页面就会显示结果从SVG文件调用javascript函数,javascript,html,svg,Javascript,Html,Svg,我有SVG文件,它由多个链接组成。一旦用户点击链接,页面就会显示结果 $(document).ready(function () { $("a").click(function() { alert('hi'); }); loadSVGasXML(); }); function loadSVGasXML() { var SVGFile="myfile.
$(document).ready(function () {
$("a").click(function() {
alert('hi');
});
loadSVGasXML();
});
function loadSVGasXML() {
var SVGFile="myfile.svg"
var loadXML = new XMLHttpRequest();
function handler(){
var svgDiv = document.all.svgDiv;
if(loadXML.readyState == 4 && loadXML.status == 0) {
var xmlString=loadXML.responseText
svgDiv.innerHTML=xmlString
fitSVGinDiv()
}
}
if (loadXML != null) {
loadXML.open("GET", SVGFile, true);
loadXML.onreadystatechange = handler;
loadXML.send();
}
}
function fitSVGinDiv(){
var divWH=60
var mySVG=document.getElementsByTagName("svg")[0]
var bb=mySVG.getBBox()
var bbw=bb.width
var bbh=bb.height
//--use greater of bbw vs bbh--
if(bbw>=bbh)
var factor=bbw/divWH
else
var factor=bbh/divWH
var vbWH=divWH*factor
var vbX=(bbw-vbWH)/2
var vbY=(bbh-vbWH)/2
mySVG.setAttribute("viewBox",vbX+" "+vbY+" "+vbWH+" "+vbWH)
mySVG.setAttribute("width","100%")
mySVG.setAttribute("height","100%")
}
</script>
<body>
<!--<a href="#crisp"> hi </a>-->
<div id="svgDiv">
</div>
<br>
<br>
<a id="crisp"> hello</a>
</div>
</body>
</html>`
SVG文件包含不同的遗传信息,需要显示多个结果
$(document).ready(function () {
$("a").click(function() {
alert('hi');
});
loadSVGasXML();
});
function loadSVGasXML() {
var SVGFile="myfile.svg"
var loadXML = new XMLHttpRequest();
function handler(){
var svgDiv = document.all.svgDiv;
if(loadXML.readyState == 4 && loadXML.status == 0) {
var xmlString=loadXML.responseText
svgDiv.innerHTML=xmlString
fitSVGinDiv()
}
}
if (loadXML != null) {
loadXML.open("GET", SVGFile, true);
loadXML.onreadystatechange = handler;
loadXML.send();
}
}
function fitSVGinDiv(){
var divWH=60
var mySVG=document.getElementsByTagName("svg")[0]
var bb=mySVG.getBBox()
var bbw=bb.width
var bbh=bb.height
//--use greater of bbw vs bbh--
if(bbw>=bbh)
var factor=bbw/divWH
else
var factor=bbh/divWH
var vbWH=divWH*factor
var vbX=(bbw-vbWH)/2
var vbY=(bbh-vbWH)/2
mySVG.setAttribute("viewBox",vbX+" "+vbY+" "+vbWH+" "+vbWH)
mySVG.setAttribute("width","100%")
mySVG.setAttribute("height","100%")
}
</script>
<body>
<!--<a href="#crisp"> hi </a>-->
<div id="svgDiv">
</div>
<br>
<br>
<a id="crisp"> hello</a>
</div>
</body>
</html>`
Onclick我需要调用一个JavaScript函数来处理结果。但是javascript:myfunction();在单击SVG文件时未调用。请建议任何替代解决方案或解决方法
$(document).ready(function () {
$("a").click(function() {
alert('hi');
});
loadSVGasXML();
});
function loadSVGasXML() {
var SVGFile="myfile.svg"
var loadXML = new XMLHttpRequest();
function handler(){
var svgDiv = document.all.svgDiv;
if(loadXML.readyState == 4 && loadXML.status == 0) {
var xmlString=loadXML.responseText
svgDiv.innerHTML=xmlString
fitSVGinDiv()
}
}
if (loadXML != null) {
loadXML.open("GET", SVGFile, true);
loadXML.onreadystatechange = handler;
loadXML.send();
}
}
function fitSVGinDiv(){
var divWH=60
var mySVG=document.getElementsByTagName("svg")[0]
var bb=mySVG.getBBox()
var bbw=bb.width
var bbh=bb.height
//--use greater of bbw vs bbh--
if(bbw>=bbh)
var factor=bbw/divWH
else
var factor=bbh/divWH
var vbWH=divWH*factor
var vbX=(bbw-vbWH)/2
var vbY=(bbh-vbWH)/2
mySVG.setAttribute("viewBox",vbX+" "+vbY+" "+vbWH+" "+vbWH)
mySVG.setAttribute("width","100%")
mySVG.setAttribute("height","100%")
}
</script>
<body>
<!--<a href="#crisp"> hi </a>-->
<div id="svgDiv">
</div>
<br>
<br>
<a id="crisp"> hello</a>
</div>
</body>
</html>`
我认为这个问题不是很清楚。更新信息
$(document).ready(function () {
$("a").click(function() {
alert('hi');
});
loadSVGasXML();
});
function loadSVGasXML() {
var SVGFile="myfile.svg"
var loadXML = new XMLHttpRequest();
function handler(){
var svgDiv = document.all.svgDiv;
if(loadXML.readyState == 4 && loadXML.status == 0) {
var xmlString=loadXML.responseText
svgDiv.innerHTML=xmlString
fitSVGinDiv()
}
}
if (loadXML != null) {
loadXML.open("GET", SVGFile, true);
loadXML.onreadystatechange = handler;
loadXML.send();
}
}
function fitSVGinDiv(){
var divWH=60
var mySVG=document.getElementsByTagName("svg")[0]
var bb=mySVG.getBBox()
var bbw=bb.width
var bbh=bb.height
//--use greater of bbw vs bbh--
if(bbw>=bbh)
var factor=bbw/divWH
else
var factor=bbh/divWH
var vbWH=divWH*factor
var vbX=(bbw-vbWH)/2
var vbY=(bbh-vbWH)/2
mySVG.setAttribute("viewBox",vbX+" "+vbY+" "+vbWH+" "+vbWH)
mySVG.setAttribute("width","100%")
mySVG.setAttribute("height","100%")
}
</script>
<body>
<!--<a href="#crisp"> hi </a>-->
<div id="svgDiv">
</div>
<br>
<br>
<a id="crisp"> hello</a>
</div>
</body>
</html>`
我有SVG文件。将其另存为系统中的mysvg.svg文件
<svg>
<g id="US">
<rect x='10' y='10' fill='#000000' height='100' width='100'></rect>
</g>
<g id="CA">
<rect x='150' y='10' fill='#0000FF' height='100' width='100'></rect>
</g>
<a xlink:href="#crisp">
<rect x="10" y="10" width="164.05078125" style="fill:none; stroke:none" height="100" pointer-events="fill" />
</a>
</svg>
$(document).ready(function () {
$("a").click(function() {
alert('hi');
});
loadSVGasXML();
});
function loadSVGasXML() {
var SVGFile="myfile.svg"
var loadXML = new XMLHttpRequest();
function handler(){
var svgDiv = document.all.svgDiv;
if(loadXML.readyState == 4 && loadXML.status == 0) {
var xmlString=loadXML.responseText
svgDiv.innerHTML=xmlString
fitSVGinDiv()
}
}
if (loadXML != null) {
loadXML.open("GET", SVGFile, true);
loadXML.onreadystatechange = handler;
loadXML.send();
}
}
function fitSVGinDiv(){
var divWH=60
var mySVG=document.getElementsByTagName("svg")[0]
var bb=mySVG.getBBox()
var bbw=bb.width
var bbh=bb.height
//--use greater of bbw vs bbh--
if(bbw>=bbh)
var factor=bbw/divWH
else
var factor=bbh/divWH
var vbWH=divWH*factor
var vbX=(bbw-vbWH)/2
var vbY=(bbh-vbWH)/2
mySVG.setAttribute("viewBox",vbX+" "+vbY+" "+vbWH+" "+vbWH)
mySVG.setAttribute("width","100%")
mySVG.setAttribute("height","100%")
}
</script>
<body>
<!--<a href="#crisp"> hi </a>-->
<div id="svgDiv">
</div>
<br>
<br>
<a id="crisp"> hello</a>
</div>
</body>
</html>`
我的HTML文件。
$(document).ready(function () {
$("a").click(function() {
alert('hi');
});
loadSVGasXML();
});
function loadSVGasXML() {
var SVGFile="myfile.svg"
var loadXML = new XMLHttpRequest();
function handler(){
var svgDiv = document.all.svgDiv;
if(loadXML.readyState == 4 && loadXML.status == 0) {
var xmlString=loadXML.responseText
svgDiv.innerHTML=xmlString
fitSVGinDiv()
}
}
if (loadXML != null) {
loadXML.open("GET", SVGFile, true);
loadXML.onreadystatechange = handler;
loadXML.send();
}
}
function fitSVGinDiv(){
var divWH=60
var mySVG=document.getElementsByTagName("svg")[0]
var bb=mySVG.getBBox()
var bbw=bb.width
var bbh=bb.height
//--use greater of bbw vs bbh--
if(bbw>=bbh)
var factor=bbw/divWH
else
var factor=bbh/divWH
var vbWH=divWH*factor
var vbX=(bbw-vbWH)/2
var vbY=(bbh-vbWH)/2
mySVG.setAttribute("viewBox",vbX+" "+vbY+" "+vbWH+" "+vbWH)
mySVG.setAttribute("width","100%")
mySVG.setAttribute("height","100%")
}
</script>
<body>
<!--<a href="#crisp"> hi </a>-->
<div id="svgDiv">
</div>
<br>
<br>
<a id="crisp"> hello</a>
</div>
</body>
</html>`
$(文档).ready(函数(){
$(“a”)。单击(函数(){
警报(“hi”);
});
loadSVGasXML();
});
函数loadSVGasXML(){
var SVGFile=“myfile.svg”
var loadXML=new XMLHttpRequest();
函数处理程序(){
var svgDiv=document.all.svgDiv;
如果(loadXML.readyState==4&&loadXML.status==0){
var xmlString=loadXML.responseText
svgDiv.innerHTML=xmlString
fitSVGinDiv()
}
}
if(loadXML!=null){
loadXML.open(“GET”,SVGFile,true);
loadXML.onreadystatechange=handler;
loadXML.send();
}
}
函数fitSVGinDiv(){
var divWH=60
var mySVG=document.getElementsByTagName(“svg”)[0]
var bb=mySVG.getBBox()
var bbw=bb.width
var bbh=bb.高度
//--使用bbw与bbh中的较大值--
如果(bbw>=bbh)
var系数=bbw/divWH
其他的
var系数=bbh/divWH
var vbWH=divWH*因子
变量vbX=(bbw vbWH)/2
变量vbY=(bbh vbWH)/2
mySVG.setAttribute(“视图框”,vbX+“”+vbY+“”+vbWH+“”+vbWH)
setAttribute(“宽度”,“100%”)
mySVG.setAttribute(“高度”、“100%”)
}
你好
`
请添加更多内容,使其看起来像一个长页面。我想在svg文件中捕获锚定标记的onclick函数,这里发生了不同的事情。首先是问题的解决方案:
$(document).ready(function () {
$("a").click(function() {
alert('hi');
});
loadSVGasXML();
});
function loadSVGasXML() {
var SVGFile="myfile.svg"
var loadXML = new XMLHttpRequest();
function handler(){
var svgDiv = document.all.svgDiv;
if(loadXML.readyState == 4 && loadXML.status == 0) {
var xmlString=loadXML.responseText
svgDiv.innerHTML=xmlString
fitSVGinDiv()
}
}
if (loadXML != null) {
loadXML.open("GET", SVGFile, true);
loadXML.onreadystatechange = handler;
loadXML.send();
}
}
function fitSVGinDiv(){
var divWH=60
var mySVG=document.getElementsByTagName("svg")[0]
var bb=mySVG.getBBox()
var bbw=bb.width
var bbh=bb.height
//--use greater of bbw vs bbh--
if(bbw>=bbh)
var factor=bbw/divWH
else
var factor=bbh/divWH
var vbWH=divWH*factor
var vbX=(bbw-vbWH)/2
var vbY=(bbh-vbWH)/2
mySVG.setAttribute("viewBox",vbX+" "+vbY+" "+vbWH+" "+vbWH)
mySVG.setAttribute("width","100%")
mySVG.setAttribute("height","100%")
}
</script>
<body>
<!--<a href="#crisp"> hi </a>-->
<div id="svgDiv">
</div>
<br>
<br>
<a id="crisp"> hello</a>
</div>
</body>
</html>`
<script language="JavaScript" src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
<script language="JavaScript">
$(document).ready(function () {
loadSVGasXML();
});
function loadSVGasXML() {
var SVGFile="myfile.svg";
var loadXML = new XMLHttpRequest();
function handler(){
var svgDiv = document.getElementById("svgDiv");
if(loadXML.readyState == 4 && loadXML.status == 200) {
var xmlString=loadXML.responseText;
svgDiv.innerHTML=xmlString;
$("a").click(function() {
alert('hi');
});
fitSVGinDiv();
}
}
if (loadXML != null) {
loadXML.open("GET", SVGFile, true);
loadXML.onreadystatechange = handler;
loadXML.send();
}
}
function fitSVGinDiv(){
var divWH=60;
var mySVG=document.getElementsByTagName("svg")[0];
var bb=mySVG.getBBox();
var bbw=bb.width;
var bbh=bb.height;
//--use greater of bbw vs bbh--
if(bbw>=bbh)
var factor=bbw/divWH;
else
var factor=bbh/divWH;
var vbWH=divWH*factor;
var vbX=(bbw-vbWH)/2;
var vbY=(bbh-vbWH)/2;
mySVG.setAttribute("viewBox",vbX+" "+vbY+" "+vbWH+" "+vbWH);
mySVG.setAttribute("width","100%");
mySVG.setAttribute("height","100%");
}
</script>
<!--<a href="#crisp"> hi </a>-->
<div id="svgDiv">
</div>
<br>
<br>
<a id="crisp"> hello</a>
</div>
它所做的,或多或少地,是寻找所有的
html元素,现在在您的网站上,并绑定到他们的onclick事件说“嗨”给大家
$(document).ready(function () {
$("a").click(function() {
alert('hi');
});
loadSVGasXML();
});
function loadSVGasXML() {
var SVGFile="myfile.svg"
var loadXML = new XMLHttpRequest();
function handler(){
var svgDiv = document.all.svgDiv;
if(loadXML.readyState == 4 && loadXML.status == 0) {
var xmlString=loadXML.responseText
svgDiv.innerHTML=xmlString
fitSVGinDiv()
}
}
if (loadXML != null) {
loadXML.open("GET", SVGFile, true);
loadXML.onreadystatechange = handler;
loadXML.send();
}
}
function fitSVGinDiv(){
var divWH=60
var mySVG=document.getElementsByTagName("svg")[0]
var bb=mySVG.getBBox()
var bbw=bb.width
var bbh=bb.height
//--use greater of bbw vs bbh--
if(bbw>=bbh)
var factor=bbw/divWH
else
var factor=bbh/divWH
var vbWH=divWH*factor
var vbX=(bbw-vbWH)/2
var vbY=(bbh-vbWH)/2
mySVG.setAttribute("viewBox",vbX+" "+vbY+" "+vbWH+" "+vbWH)
mySVG.setAttribute("width","100%")
mySVG.setAttribute("height","100%")
}
</script>
<body>
<!--<a href="#crisp"> hi </a>-->
<div id="svgDiv">
</div>
<br>
<br>
<a id="crisp"> hello</a>
</div>
</body>
</html>`
起初没有svg,因此没有“a”元素,您需要进行绑定。然后通过loadSVGasXML()加载svg代码>和html内容被更改。添加了新的标记。但此标记在绑定事件宽度$(“a”)后附加到网页。单击(函数(){alert('hi'))
所以这个新的onclick事件还没有被绑定。所以你需要做的是在加载所有内容后动态更改web内容时进行事件绑定。所以你需要将绑定放在处理程序回调函数中
$(document).ready(function () {
$("a").click(function() {
alert('hi');
});
loadSVGasXML();
});
function loadSVGasXML() {
var SVGFile="myfile.svg"
var loadXML = new XMLHttpRequest();
function handler(){
var svgDiv = document.all.svgDiv;
if(loadXML.readyState == 4 && loadXML.status == 0) {
var xmlString=loadXML.responseText
svgDiv.innerHTML=xmlString
fitSVGinDiv()
}
}
if (loadXML != null) {
loadXML.open("GET", SVGFile, true);
loadXML.onreadystatechange = handler;
loadXML.send();
}
}
function fitSVGinDiv(){
var divWH=60
var mySVG=document.getElementsByTagName("svg")[0]
var bb=mySVG.getBBox()
var bbw=bb.width
var bbh=bb.height
//--use greater of bbw vs bbh--
if(bbw>=bbh)
var factor=bbw/divWH
else
var factor=bbh/divWH
var vbWH=divWH*factor
var vbX=(bbw-vbWH)/2
var vbY=(bbh-vbWH)/2
mySVG.setAttribute("viewBox",vbX+" "+vbY+" "+vbWH+" "+vbWH)
mySVG.setAttribute("width","100%")
mySVG.setAttribute("height","100%")
}
</script>
<body>
<!--<a href="#crisp"> hi </a>-->
<div id="svgDiv">
</div>
<br>
<br>
<a id="crisp"> hello</a>
</div>
</body>
</html>`
其次,您正在使用一种旧方法获取DOM。document.all.svgDiv
它可以追溯到罗马帝国之前的黑暗时期(只是开玩笑)在哪里开发任何与web相关的东西都是一件让人头疼的事。在那些悲惨的时代,每个浏览器都有自己的访问DOM的方式。在我们的情况下,这是很久以前在IE中访问DOM对象的方式。幸运的是,现在一切都变得更好了,并且有更好的方式访问受支持的DOM如果您想使用原始javascript通过id访问DOM元素,我建议您始终使用document.getElementById(“svgDiv”);
$(document).ready(function () {
$("a").click(function() {
alert('hi');
});
loadSVGasXML();
});
function loadSVGasXML() {
var SVGFile="myfile.svg"
var loadXML = new XMLHttpRequest();
function handler(){
var svgDiv = document.all.svgDiv;
if(loadXML.readyState == 4 && loadXML.status == 0) {
var xmlString=loadXML.responseText
svgDiv.innerHTML=xmlString
fitSVGinDiv()
}
}
if (loadXML != null) {
loadXML.open("GET", SVGFile, true);
loadXML.onreadystatechange = handler;
loadXML.send();
}
}
function fitSVGinDiv(){
var divWH=60
var mySVG=document.getElementsByTagName("svg")[0]
var bb=mySVG.getBBox()
var bbw=bb.width
var bbh=bb.height
//--use greater of bbw vs bbh--
if(bbw>=bbh)
var factor=bbw/divWH
else
var factor=bbh/divWH
var vbWH=divWH*factor
var vbX=(bbw-vbWH)/2
var vbY=(bbh-vbWH)/2
mySVG.setAttribute("viewBox",vbX+" "+vbY+" "+vbWH+" "+vbWH)
mySVG.setAttribute("width","100%")
mySVG.setAttribute("height","100%")
}
</script>
<body>
<!--<a href="#crisp"> hi </a>-->
<div id="svgDiv">
</div>
<br>
<br>
<a id="crisp"> hello</a>
</div>
</body>
</html>`
最后是loadXML.status
。当请求成功时,状态为200而不是0
$(document).ready(function () {
$("a").click(function() {
alert('hi');
});
loadSVGasXML();
});
function loadSVGasXML() {
var SVGFile="myfile.svg"
var loadXML = new XMLHttpRequest();
function handler(){
var svgDiv = document.all.svgDiv;
if(loadXML.readyState == 4 && loadXML.status == 0) {
var xmlString=loadXML.responseText
svgDiv.innerHTML=xmlString
fitSVGinDiv()
}
}
if (loadXML != null) {
loadXML.open("GET", SVGFile, true);
loadXML.onreadystatechange = handler;
loadXML.send();
}
}
function fitSVGinDiv(){
var divWH=60
var mySVG=document.getElementsByTagName("svg")[0]
var bb=mySVG.getBBox()
var bbw=bb.width
var bbh=bb.height
//--use greater of bbw vs bbh--
if(bbw>=bbh)
var factor=bbw/divWH
else
var factor=bbh/divWH
var vbWH=divWH*factor
var vbX=(bbw-vbWH)/2
var vbY=(bbh-vbWH)/2
mySVG.setAttribute("viewBox",vbX+" "+vbY+" "+vbWH+" "+vbWH)
mySVG.setAttribute("width","100%")
mySVG.setAttribute("height","100%")
}
</script>
<body>
<!--<a href="#crisp"> hi </a>-->
<div id="svgDiv">
</div>
<br>
<br>
<a id="crisp"> hello</a>
</div>
</body>
</html>`
可能你已经知道了,这只是一个复制粘贴错误。只是指向它。希望这对你有所帮助。添加一些代码。尝试使用onclick
而不是javascript:
URI模式。我想问题不是很清楚。通过正确缩进,你能让SVG代码更可读吗?如果我放置他的svg(更改x和y属性以使矩形位于屏幕内)在一个简单的html中,在firefox中对我有效的svg之后定义了myfunction()。也许你的问题来自另一方面。你能提供更多细节吗?我正在处理(宽度、高度)svg文件以适合我的html页面。解决方案。我正在使用html 4。
$(document).ready(function () {
$("a").click(function() {
alert('hi');
});
loadSVGasXML();
});
function loadSVGasXML() {
var SVGFile="myfile.svg"
var loadXML = new XMLHttpRequest();
function handler(){
var svgDiv = document.all.svgDiv;
if(loadXML.readyState == 4 && loadXML.status == 0) {
var xmlString=loadXML.responseText
svgDiv.innerHTML=xmlString
fitSVGinDiv()
}
}
if (loadXML != null) {
loadXML.open("GET", SVGFile, true);
loadXML.onreadystatechange = handler;
loadXML.send();
}
}
function fitSVGinDiv(){
var divWH=60
var mySVG=document.getElementsByTagName("svg")[0]
var bb=mySVG.getBBox()
var bbw=bb.width
var bbh=bb.height
//--use greater of bbw vs bbh--
if(bbw>=bbh)
var factor=bbw/divWH
else
var factor=bbh/divWH
var vbWH=divWH*factor
var vbX=(bbw-vbWH)/2
var vbY=(bbh-vbWH)/2
mySVG.setAttribute("viewBox",vbX+" "+vbY+" "+vbWH+" "+vbWH)
mySVG.setAttribute("width","100%")
mySVG.setAttribute("height","100%")
}
</script>
<body>
<!--<a href="#crisp"> hi </a>-->
<div id="svgDiv">
</div>
<br>
<br>
<a id="crisp"> hello</a>
</div>
</body>
</html>`