在SVG中,要遍曆所有的元素,得用javascript(js)實現,嘻嘻,這個等於沒說,只要學SVG的人都知道,此外還需要用到一些DOM介面。以下所說代碼均為js代碼。
首先,通過document.documentElement屬性,獲得整個SVG文檔,即SVG的根項目,所有的節點都包含在該元素中。當然,如果是想訪問某個已知ID的節點中的各子節點,則可以直接通過document.getElementById("元素的ID")找到局部的根項目。為了敘述連貫,假設node代表要訪問的各元素的根節點。 接下來就可以對根項目中的各節點進行訪問了。可以通過for語句依次訪問各節點,初值為0,終值為node.childNodes.length。在SVG中,兩個節點元素之間的空白地區也算是一個元素,它的nodeType值為3,即為Text_Node,所以可通過該特點將其排除掉。至於其餘的具體的每個節點,可通過node.childNodes.item(i)訪問。
var SvgMainMapDoc=id2.getSVGDocument();
var node=SvgMainMapDoc.documentElement;
var child;
for(var i=0;i<node.childNodes.length;i++){
if(node.childNodes.item(i).nodeType!=3){
child=node.childNodes.item(i);
if(child.getAttribute("id"))
{
alert(child.getAttribute("id"))
}
}
}
其中id2是
<embed src="未命名-1.svg" type="image/svg+xml" name="id2" pluginspage="http://www.adobe.com/svg/viewer/install/main.html"
menu="false" width="30" height="30"></embed>
下面是遞迴遍曆所有的父子節點
function getlayer()
{
var SvgMainMapDoc=id2.getSVGDocument();
var node=SvgMainMapDoc.documentElement;
findnode(node)
}
//遞迴遍曆節點nodeType為3兩個節點元素之間的空白地區也算是一個元素,4時是指令碼
function findnode(node)
{
for(var i=0;i<node.childNodes.length;i++)
{
if(node.childNodes.item(i).nodeType!=3&&node.childNodes.item(i).nodeType!=4)
{
var child=node.childNodes.item(i);
if(child.getAttribute("layer"))
{
alert(child.getAttribute("layer"));
}
if(child.childNodes)
{
findnode(child);
}
else
{
break;
}
}
}
}