2013-05-29 5 views
33

यह काम करता है:d3.select ("# तत्व") काम नहीं कर रहा है जब HTML तत्व ऊपर कोड

<div id="chart"></div> 
<script>var svg = d3.select("#chart").append("svg:svg");</script> 

यह नहीं करता है:

<script>var svg = d3.select("#chart").append("svg:svg");</script> 
<div id="chart"></div> 

मैं एक jQuery में कोड लपेटकर की कोशिश की document.ready(), jquery के साथ तत्व को पकड़ना, और इसे d3.select में गुजरना, लेकिन यह भी काम नहीं करता है। संपादित करें एक बार मुझे jquery document.ready() वाक्यविन्यास सही मिला, यह काम किया।

किसी भी तरह से मैं पेज के शीर्ष पर जावास्क्रिप्ट शामिल कर सकते हैं और अभी भी नीचे एक तत्व का चयन? धन्यवाद।

+0

आसान समाधान लेकिन एक मुश्किल एक के बाद एक को आसानी से भूल सकते के रूप में एचटीएमएल शरीर में अपने #chart तत्व का पता लगाने है। जैसा कि सबसे ऊपर मतदान समाधान द्वारा लिखा गया है। बनने से पहले डोम तत्वों के साथ खेलने के बारे में सावधान रहें। डॉर्म पदानुक्रम में मौजूद होने से पहले दूसरे शब्दों में। तो तत्व आईडी के नाम से तत्व के बाद स्क्रिप्ट लोड करें। – user3672653

उत्तर

54
<script>$(function(){var svg = d3.select("#chart").append("svg:svg");});</script> 
<div id="chart"></div> 

दूसरे शब्दों में, यह नहीं हो रहा है क्योंकि आप कुछ है कि (jQuery के माध्यम से यहाँ) yet-- तो बस कर अस्तित्व में नहीं है पृष्ठ लोड के बाद के खिलाफ क्वेरी नहीं कर सकता।

Btw, इसकी सिफारिश की है कि आप अपने शरीर टैग बंद होने से पहले अपने जे एस फ़ाइलें रख।

+0

मैंने jquery के साथ-साथ 'd3.select ($ ("# chart")) की कोशिश की, लेकिन यह भी काम नहीं करता था। डी 3 दस्तावेज़ों के बावजूद: 'ये विधियां नोड्स को भी स्वीकार कर सकती हैं, जो कि jQuery या डेवलपर टूल जैसे तृतीय पक्ष पुस्तकालयों के साथ एकीकरण के लिए उपयोगी है' –

+3

मुझे लगता है कि आप मेरी पोस्ट का बिंदु खो रहे हैं - जो आप हैं कुछ ऐसी चीज के खिलाफ पूछने की कोशिश कर रहा है जो अभी तक मौजूद नहीं है। इसके बारे में सोचें - क्योंकि पेज ब्राउज़र में कोड को निष्पादित करता है। यदि आपका जेएस तत्व से पहले पूछताछ करने की कोशिश कर रहा है, तो उसका निष्पादन उस नोड के अस्तित्व में नहीं है - समझते हैं? आपको पूछने के लिए डीओएम पूरी तरह से लोड होने तक प्रतीक्षा करने की आवश्यकता है (या जिस नोड के साथ आप काम कर रहे हैं वह पूरी तरह से लोड हो गया है)। – Micah

+4

रिक जॉली, डी 3. चयन करें कि एक डीओएम तत्व एक jquery वस्तु नहीं है। आप $ ("# चार्ट") [0] का उपयोग करना चाहते हैं। [0] आइटम डीओएम तत्व संदर्भ है। – DRaehal

13

पर्याप्त नहीं प्रतिष्ठा अभी तक कोई टिप्पणी तो मैं बस यहाँ इस डाल देता हूँ करने के लिए:

मीका के जवाब पर विस्तार करने के लिए - ब्राउज़र नीचे करने के लिए अपने कोड शीर्ष चलाता है, इसलिए यदि आप लिखना:

<div id="chart"></div> 
<script>var svg = d3.select("#chart").append("svg:svg");</script> 

ब्राउज़र आईडी "चार्ट" के साथ एक div बना देगा, और फिर अपनी स्क्रिप्ट चलाएगा, जो उस div को खोजने का प्रयास करेगा, और, hurray, सफलता।

अन्यथा यदि आप लिखना:

<script>var svg = d3.select("#chart").append("svg:svg");</script> 
<div id="chart"></div> 

ब्राउज़र अपनी स्क्रिप्ट चलाता है, और आईडी चार्ट के साथ एक div खोजने की कोशिश करता है, लेकिन यह अभी तक नहीं बनाया नहीं किया गया है तो यह विफल रहता है।

तो ब्राउज़र आईडी "चार्ट" के साथ एक div पैदा करता है।

1

उपयोग jQuery $(document) समारोह ...

$(document).ready(function(){ 

var margin = {top: 20, right: 20, bottom: 30, left: 40}, 
    width = 960 - margin.left - margin.right, 
    height = 500 - margin.top - margin.bottom; 

var x0 = d3.scale.ordinal() 
    .rangeRoundBands([0, width], .1); 

var x1 = d3.scale.ordinal(); 

var y = d3.scale.linear() 
    .range([height, 0]); 

var color = d3.scale.ordinal() 
    .range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"]); 

var xAxis = d3.svg.axis() 
    .scale(x0) 
    .orient("bottom"); 

var yAxis = d3.svg.axis() 
    .scale(y) 
    .orient("left") 
    .tickFormat(d3.format(".2s")); 

//d3.select('#chart svg') 
//d3.select("body").append("svg") 


    //var svg = d3.select("#chart").append("svg:svg"); 

    var svg = d3.select("#BarChart").append("svg:svg") 
    .attr("width", width + margin.left + margin.right) 
    .attr("height", height + margin.top + margin.bottom) 
    .append("g") 
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); 

    var updateData = function(getData){ 

    d3.selectAll('svg > g > *').remove(); 

    d3.csv(getData, function(error, data) { 
     if (error) throw error; 

     var ageNames = d3.keys(data[0]).filter(function(key) { return key !== "State"; }); 

     data.forEach(function(d) { 
     d.ages = ageNames.map(function(name) { return {name: name, value: +d[name]}; }); 
     }); 

     x0.domain(data.map(function(d) { return d.State; })); 
     x1.domain(ageNames).rangeRoundBands([0, x0.rangeBand()]); 
     y.domain([0, d3.max(data, function(d) { return d3.max(d.ages, function(d) { return d.value; }); })]); 

     svg.append("g") 
      .attr("class", "x axis") 
      .attr("transform", "translate(0," + height + ")") 
      .call(xAxis); 

     svg.append("g") 
      .attr("class", "y axis") 
      .call(yAxis) 
     .append("text") 
      .attr("transform", "rotate(-90)") 
      .attr("y", 6) 
      .attr("dy", ".71em") 
      .style("text-anchor", "end") 
      .text("Population"); 

     var state = svg.selectAll(".state") 
      .data(data) 
     .enter().append("g") 
      .attr("class", "state") 
      .attr("transform", function(d) { return "translate(" + x0(d.State) + ",0)"; }); 

     state.selectAll("rect") 
      .data(function(d) { return d.ages; }) 
     .enter().append("rect") 
      .attr("width", x1.rangeBand()) 
      .attr("x", function(d) { return x1(d.name); }) 
      .attr("y", function(d) { return y(d.value); }) 
      .attr("height", function(d) { return height - y(d.value); }) 
      .style("fill", function(d) { return color(d.name); }); 

     var legend = svg.selectAll(".legend") 
      .data(ageNames.slice().reverse()) 
     .enter().append("g") 
      .attr("class", "legend") 
      .attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; }); 

     legend.append("rect") 
      .attr("x", width - 18) 
      .attr("width", 18) 
      .attr("height", 18) 
      .style("fill", color); 

     legend.append("text") 
      .attr("x", width - 24) 
      .attr("y", 9) 
      .attr("dy", ".35em") 
      .style("text-anchor", "end") 
      .text(function(d) { return d; }); 

    }); 

} 

updateData('data1.csv'); 

}); 
+0

इस कोड को प्रश्न के साथ क्या करना है? – eagor

+0

उदाहरण उपयोग के लिए तैयार के लिए काम किया। सरल :) – Karthi

0

सिर्फ अपने <script src="./custom.js"></script></bod> से पहले टैग को जोड़ने। कि d3.select(#chart) के लिए आपूर्ति समय

संबंधित मुद्दे