1.遇見的問題:項目遇到拓撲圖,是基於svg的,當拓撲圖中的每一個設備點擊選中時,需要彈出一個框,這個框已經封裝好了,但是沒有小三角,好吧,我自己來搞
2.我的實現:當我用document.createElement方法動態生成polygon節點后插入svg節點,並沒有什么卵用。我審查元素時,看到節點確實已經生成了,但是就是不顯示,而且一樣的代碼我復制一遍放到節點中,就有效果。對svg一臉陌生的我,出了蒙圈,還有,好奇。
3.原因查找:用document.createElement創建出來的節點是屬於html dom,而svg的節點是svg dom。所以需要用createElementNS函數並傳入節點名稱的命名空間。
4.動態創建svg:
var svgDom = document.createElementNS('http://www.w3.org/2000/svg','svg');
svgDom.setAttribute('width','1000');
svgDom.setAttribute('height','1000');
document.body.appendChild(svgDom);
5.動態創建svg的形狀元素,比如 創建一個三角形
var polygonDom = document.createElementNS('http://www.w3.org/2000/svg','polygon');
polygonDom.setAttribute('points','200,60 240 ,60 220,80');
polygonDom.setAttribute('style','fill:black;strock:#ccc;stroke-width:1;');
svgDom.appendChild(polygonDom);
6.總結:創建svg 節點要用createElementNS函數並且要傳入節點名稱的命名空間。