2012-09-14 22 views
9

Tôi có một xây dựng:Bắt 'XLink: href' thuộc tính của phần tử SVG <image> động sử dụng JS trong HTML DOM

<div id="div"> 
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="svg"> 
     <image x="2cm" y="2cm" width="5cm" height="5cm" id="img" xlink:href="pic.jpg"></image> 
    </svg> 
</div> 

Tôi muốn nhận pic.jpg url và tôi cần phải bắt đầu từ các div bên ngoài nhất, không chính xác từ các yếu tố nguồn <image>:

var div = document.getElementById("div"); 
var svg = div.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'svg')[0]; 
var img = svg.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'image')[0]; 
var url = img.getAttribute('xlink:href'); // Please pay attention I do not use getAttributeNS(), just usual getAttribute() 

alert(url);  // pic.jpg, works fine 

câu hỏi của tôi là đúng cách để có được loại đó của thuộc tính từ yếu tố như SVG và trẻ em của nó là gì?

Bởi vì trước khi tôi cố gắng làm theo cách này và nó cũng đã làm việc tốt trong Chrome (Tôi không thử các trình duyệt khác):

var svg = div.getElementsByTagName('svg')[0]; // I do not use NS 
var img = svg.getElementsByTagName('image')[0]; 
var url = img.getAttribute('xlink:href'); // and do not use getAttributeNS() here too 

alert(url);  // pic.jpg, works fine 

Nhưng khi tôi cố gắng sử dụng getAttributeNS() tôi có kết quả trống:

var svg = div.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'svg')[0]; 
var img = svg.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'image')[0]; 

// Please pay attention I do use getAttributeNS() 
var url = img.getAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href'); 

alert(url);  // but I got black result, empty alert window 

Trả lời

21

Cách sử dụng đúng là getAttributeNS('http://www.w3.org/1999/xlink', 'href');

+3

Cảm ơn! Câu trả lời này đã giúp tôi * đặt * thuộc tính xlink: href của một hình ảnh trong nội dung SVG của tôi thông qua JavaScript. Mã của tôi trông giống như: img.setAttributeNS ('http://www.w3.org/1999/xlink', 'href', 'new.url'); nơi new.url là url của hình ảnh mà tôi muốn thay thế bản gốc. – grw

+0

bây giờ làm thế nào để làm điều tương tự với bộ chọn jquery? –

+4

Sử dụng jquery với SVG sẽ khiến bạn bị đau và tránh được nhiều nhất. –

Các vấn đề liên quan