我對編程和編碼非常陌生。我正在使用由Adobe Illustrator生成的.svg文件與d3.js製作交互式地圖。如何使用svg多邊形自定義屬性(data- *)來設置這些相同的多邊形的樣式?
這個SVG是用g的多邊形裏面有自己的id組織的。我還添加了自定義的數據做每個多邊形的SVG(數據價格=「號」):
<g id="price-range">
<polygon id="name" data-price="price number" points="..."/>
<polygon id="name2" data-price="price2 number" points="..."/>
// and so on
</g>
我想用這些自定義數據屬性的數據來生成這些多邊形的不同風格的輸出。這是到目前爲止我的代碼(它不工作):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>D3 Test</title>
<script type="text/javascript" src="d3/d3.js"></script>
<style type="text/css">
#map-block {
width: 100%;
max-width: 1000px;
align-content: center;
margin: auto; }
</style>
</head>
<body>
<div id="map-block">
<svg id="mapa-usados-sp" width="100%"></svg>
</div>
<script>
var svg = null;
var mapa = null;
d3.xml("sp.svg", function(error, xml) {
if (error) throw error;
var domSVG = document.getElementById('mapa-usados-sp');
domSVG.appendChild(xml.documentElement.getElementById('mapa'));
svg = d3.select(domSVG);
mapa = svg.select('#mapa');
var xmlSVG = d3.select(xml.getElementsByTagName('svg')[0]);
svg.attr('viewBox', xmlSVG.attr('viewBox'));
var bg = mapa.selectAll("g#contexto");
bg.style("fill", "#e9e9e9");
var shapes = mapa.select("g#zones").selectAll("polygon");
var price = shapes.(xml.documentElement.getAttribute('data-
price'));
shapes.style("fill", function(price) {
if (price = 0) { return "#323232";}
if (price <= 1700 && price > 0) {return "#2169dd";}
if (price > 1700 && d <= 2500) {return "#6921dd";}
});
});
</script>
</body>
</html>
我選擇不樣式每個形狀指的它的ID或類,因爲我真的很喜歡使用在.svg文件的自定義數據屬性生成視覺輸出。
最後這將是一個非常有活力的一塊。我將添加交互和事件監聽器,所以這就是爲什麼我非常想知道如何從.svg屬性提取數據並使用它來設置包含這些屬性的形狀。
我希望我已經正確地表達了我的觀點。
你能提供所需的輸出嗎? – VMAtm
您的問題*標題*有點誤導:它詢問將數據屬性傳遞給D3'data()'函數。但是,在問題本身中沒有'數據'功能,除此之外您沒有「輸入」選擇。因此,我刪除了標題中對D3'data()'的引用。 –
@GerardoFurtado這是真的,謝謝! –