杞人忧天上掉下个林妹妹

穿越旷野的妹妹啊,慢些走;请不要用你的沉默告诉我,你不回头!

导航

SVG的DOM树

HTML页面加载SVG
<embed name="SVG_PowerSystemGraph" width="780px" height="350px" src="../SVGFile/PowerSystemGraph.svg" type="image/svg+xml"></embed>
<script type="text/javascript">
document.onreadystatechange = function()  
{  
      if(document.readyState == "complete")  
      {  
            Windown_LoadSVG("<%=CurrentMachNo %>", <%=PowerSystemGraphRefurbishCyc %>);
      }  
}
window.onunload = SVGDisponse;
</script>

乱码解决方法

1、 设置SVG文档编码格式:encoding="utf-8";
2、 SVG文件的编码方式指定为utf-8,方法是用EditPlus打开SVG文件,文件->另存为 编码选择为utf-8即可以了;

基本的svgDOM树:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" height="300">
 <g id="firstGroup">
  <rect id="myBlueRect" width="100" height="50" x="40" y="20" fill="blue" />
  <text x="40" y="100">This is a basic SVG document!</text>
 </g>
</svg>

使用JAVASCRIPT访问SVG元素,并获取属性值
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" height="300">
 <script type="text/ecmascript">
  <![CDATA[
  function showRectColor()
  {
   alert(document.getElementById("myBlueRect").getAttributeNS(null,"fill"));
  }
   function showRectArea(evt)
  {
   var width = parseFloat(evt.target.getAttributeNS(null,"width"));
   var height =parseFloat(evt.target.getAttributeNS(null,"height"));
   alert("The rectangle area is: " + (width * height)); }
  function showRootChildrenNr()
  {
   alert("Nr of Children: "+document.documentElement.childNodes.length);
  }
  ]]>
 </script>
 <g id="firstGroup">
  <rect id="myBlueRect" width="100" height="50" x="40" y="20" fill="blue" onclick="showRectArea(evt)"/>
  <text x="40" y="100" onclick="showRectColor()">Click on this text to show rectangle color.</text>
  <text x="40" y="130">Click on rectangle to show rectangle area.</text>
  <text x="40" y="160" onclick="showRootChildrenNr()">Click on this text to show the number of child
   <tspan x="40" dy="20">elements of the root element.</tspan>
  </text>
 </g>
</svg>

设置单个元素的属性值
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" height="300">
 <script type="text/ecmascript">
  <![CDATA[
  function changeRectColor(evt)
  {
   var red = Math.round(Math.random() * 255);
   var green = Math.round(Math.random() * 255);
   var blue = Math.round(Math.random() * 255);
   evt.target.setAttributeNS(null,"fill","rgb("+ red +","+ green+","+blue+")");
  }
  ]]>
 </script>
 <g id="firstGroup">
  <rect id="myBlueRect" width="100" height="50" x="40" y="20" fill="blue" onclick="changeRectColor(evt)"/>
  <text x="40" y="100">Click on rectangle to change it's color.</text>
 </g>
</svg>

检查,并删除属性值
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" height="300">
 <script type="text/ecmascript">
  <![CDATA[
  function removeFill(evt)
  {
   //通过获得元素,
   var element = evt.target;
   if (element.hasAttributeNS(null,"fill"))
   {
    element.removeAttributeNS(null,"fill");
   }
   else
   {
    alert("This element doesn't have a fill attribute.");
   }
  }
  ]]>
 </script>
  <g id="firstGroup">
   <rect width="70" height="50" x="40" y="5" fill="blue" onclick="removeFill(evt)"/>
   <rect width="70" height="50" x="40" y="65" fill="blue" onclick="removeFill(evt)"/>
   <rect width="70" height="50" x="40" y="125" fill="blue" onclick="removeFill(evt)"/>
   <rect width="70" height="50" x="40" y="185" fill="blue" onclick="removeFill(evt)"/>
   <rect width="70" height="50" x="40" y="245" fill="blue" onclick="removeFill(evt)"/>
   <text x="150" y="30">Click on rectangle
   <tspan x="150" dy="15">to remove it's color.</tspan>
  </text>
  </g>
 </svg>

父结点,子结点,和兄弟结点
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" height="100">
 <script type="text/ecmascript">
  <![CDATA[
  function showContentAndRelatives(evt)
  {
   //get reference to text element
   var textElement = document.getElementById("myText");
   //get reference to parent of element
   var parent = textElement.parentNode;
   alert("the parent node has id '"+parent.getAttributeNS(null,'id')+"'\nNodename is '" +parent.nodeName+"'");
   //get a reference to the first child of the element "myText"
   var child = textElement.firstChild; //loop over all childs
   while (child != null)
   {
    //see if child is a tspan and has child nodes
    if (child.nodeName == "tspan" && child.hasChildNodes())
    {
     //see if firstChild is of nodeType "text"
     if (child.firstChild.nodeType == 3)
     {
      alert("child's text content="+child.firstChild.nodeValue);
     }
    }
    child = child.nextSibling;
   }
   alert("the content of the second tspan Child is: "+textElement.childNodes.item(1).firstChild.nodeValue);
  }
  ]]>
 </script>
 <g id="firstGroup">
  <text id="myText" x="50" y="30" onclick="showContentAndRelatives(evt)">
   <tspan>Click on text</tspan>
   <tspan x="50" dy="15">to get parent node data</tspan>
   <tspan x="50" dy="15">and to see the text node values </tspan>
   <tspan x="50" dy="15">of each line</tspan>
  </text>
 </g>
</svg>

posted on 2007-06-14 16:46  杞人  阅读(1773)  评论(0编辑  收藏  举报