मैं DOM-कंटेनर के माध्यम से Highcharts चार्ट तक कैसे पहुंच सकता हूं


85

जब मैं एक divchar कंटेनर में एक highcharts- चार्ट प्रस्तुत करता हूं, तो मैं div- कंटेनर के माध्यम से चार्ट ऑब्जेक्ट तक कैसे पहुंच सकता हूं? मैं चार्ट को वैश्विक नहीं बनाना चाहता।

        var chart = new Highcharts.Chart({
            chart: {
                renderTo: "testDivId",
                                ...

मैं इस तरह के संदर्भ के बाहर चार्ट का उपयोग करना चाहता हूं (स्यूडोकोड), कॉल फ़ंक्शन के लिए:

var chart = Highcharts.Chart("testDivId"); //access from id
chart.redraw();

जवाबों:


139

हाईचर्स 3.0.1

उपयोगकर्ता हाईचर्स प्लगइन का उपयोग कर सकते हैं

var chart=$("#container").highcharts();

हाईचर्स 2.3.4

संस्करण 2.3.4 और बाद के संस्करण के लिए Highcharts.charts सरणी से पढ़ें , चार्ट का सूचकांक डेटा पर डेटा से पाया जा सकता है<div>

 var index=$("#container").data('highchartsChart');
 var chart=Highcharts.charts[index];

सभी संस्करण

कंटेनर आईडी द्वारा एक वैश्विक वस्तु / नक्शे में ट्रैक चार्ट

var window.charts={}; 
function foo(){
  new Highcharts.Chart({...},function(chart){  
      window.charts[chart.options.chart.renderTo] = chart;
  });
}

function bar(){
  var chart=window.charts["containerId"];
}

पढ़ें मोड @ Highcharts टिप्स - एक कंटेनर आईडी से चार्ट ऑब्जेक्ट तक पहुंचना

पुनश्च

इस उत्तर को लिखने के बाद से हाईचर्स के नए संस्करणों में कुछ परिवर्धन किए गए थे और उन्हें @davertron, @Moes और @Przy के उत्तरों से लिया गया है , कृपया उनकी टिप्पणियों / उत्तरों को अपवर्जित करें क्योंकि वे इनका श्रेय प्राप्त करते हैं। उन्हें यहाँ जोड़ना क्योंकि यह स्वीकृत उत्तर इनके बिना अधूरा होगा


10
यह संस्करण 2.3.4 जैसा दिखता है। हाईचर्ट
davertron

@davertron अपडेट के लिए धन्यवाद ... यह एक अच्छी सुविधा है, लगता है कि बहुत कोड / प्रयास यह करने की आवश्यकता नहीं थी ...
जुगल ठक्कर

$ 1 ("# कंटेनर") के लिए। डेटा ('highchartsChart') के रूप में highcharts सूचकांक। यह बहुत उपयोगी है, धन्यवाद!
शाहर

1
किसी भी इसी तरह की विधि मैं हाईस्टॉक के लिए उपयोग कर सकता हूं?
tnkh

45

तुम यह केर सकते हो

var chart = $("#testDivId").highcharts();

fiddler पर उदाहरण देखें


यह मेरे लिए काम नहीं किया, मुझे @ उत्तर का उपयोग करना पड़ा। मैं संस्करण 4.1.4 का उपयोग कर रहा हूँ
डेविड टोरेस

यह निश्चित नहीं है कि आपके लिए यह काम क्यों नहीं किया गया है। उदाहरण के लिए v4.2.3
Nerdroid

1
यह चार्ट के बजाय कंटेनर तत्व वापस कर रहा है, और इसीलिए @Frzy जवाब ने काम किया। इसके अलावा, मुझे एक और समाधान मिला:$("#testDivId").highcharts({...}, function(chart) {...});
डेविड टोरेस

आप बटन क्लिक करने के बाद निश्चित रूप से ऑब्जेक्ट jsfiddle.net/abbasmhd/86hLvc5s कंसोल आउटपुट की जांच कर रहे हैं
Nerdroid

1
हाँ, jsfiddle में वह कर रहा है, मैं सहमत हूं। लेकिन हर कोई एक ही काम नहीं कर रहा है, जैसा कि आप देख सकते हैं @Frzy जवाब के 11 upvotes
डेविड टोरेस

22
var $chartCont = $('#container').highcharts({...}),
    chartObj = Highcharts.charts[$chartCont.data('highchartsChart')];

ChartCont jQuery ऑब्जेक्ट है। ChartObj हाईचर चार्ट ऑब्जेक्ट है।

यह Highcharts 3.01 का उपयोग कर रहा है


9

मुझे ऐसा करने का एक और तरीका मिला ... मुख्यतः क्योंकि मैं हाईस्टार्ट्स का उपयोग कर रहा हूं जो आउटसिस्टम प्लेटफॉर्म में एम्बेडेड हैं, और मेरे पास चार्ट बनाने के तरीके को नियंत्रित करने का तरीका नहीं है।

जिस तरह से मैंने पाया वह निम्नलिखित था:

  1. classNameविशेषता का उपयोग करके चार्ट को एक पहचान वर्ग दें

    chart: {
        className: 'LifeCycleMasterChart'
    }
    
  2. वर्ग नाम से चार्ट प्राप्त करने के लिए एक सहायक फ़ंक्शन को परिभाषित करें

    function getChartReferenceByClassName(className) {
    var cssClassName = className;
    var foundChart = null;
    
    $(Highcharts.charts).each(function(i,chart){    
        if(chart.container.classList.contains(cssClassName)){
            foundChart = chart;
            return;
        }
    });
    
    return foundChart;
    

    }

  3. जहां भी जरूरत हो सहायक समारोह का उपयोग करें

    var detailChart = getChartReferenceByClassName('LifeCycleDetailChart');
    

आशा है कि यह आपकी मदद करता है!


9

बस शुद्ध जेएस के साथ:

var obj = document.getElementById('#container')
    Highcharts.charts[obj.getAttribute('data-highcharts-chart')];

4
var chart1; // globally available
$(document).ready(function() {
      chart1 = new Highcharts.Chart({
         chart: {
            renderTo: 'container',
            type: 'bar'
         },
         title: {
            text: 'Fruit Consumption'
         },
         xAxis: {
            categories: ['Apples', 'Bananas', 'Oranges']
         },
         yAxis: {
            title: {
               text: 'Fruit eaten'
            }
         },
         series: [{
            name: 'Jane',
            data: [1, 0, 4]
         }, {
            name: 'John',
            data: [5, 7, 3]
         }]
      });
   });

वर्जन चार्ट 1 वैश्विक है इसलिए आप डी हाईचर्ट ऑब्जेक्ट का उपयोग नहीं कर सकते हैं जो कि कंटेनर है

chart1.redraw();


2

... और एक सहयोगी की मदद से ... इसे करने का एक बेहतर तरीका है ...

getChartReferenceByClassName(className) {
    var foundChart = $('.' + className + '').eq(0).parent().highcharts();

    return foundChart;
}

1

@ माता-पिता का उत्तर सही और उत्कीर्ण है, हालांकि मुझे इसे स्पष्ट करने के लिए इसे थोड़ा साफ करना पड़ा:

const myChartEl = document.getElementById('the-id-name');
const myChart = Highcharts.charts[myChartEl.getAttribute('data-highcharts-chart')];

myChartफिर एक लाइव हाईचर्ट ऑब्जेक्ट बन जाता है, जो चार्ट में मौजूद सभी मौजूदा प्रॉप्स को उजागर करता है जो इसमें प्रस्तुत किए गए हैं myChartEl। चूँकि myChartएक Highcharts ऑब्जेक्ट है, कोई इसके बाद प्रोटोटाइप विधियों को चेन कर सकता है, इसे बढ़ा सकता है या इसे संदर्भित कर सकता है।

myChart.getTable();
myChart.downloadXLS();
setTimeout(() => Highcharts.fireEvent(myChart, "redraw"), 10);

एक के myChartमाध्यम से भी प्राप्त कर सकते हैं .highcharts(), जो एक jQueryप्लगइन है:

var myChart = $("#the-id-name").highcharts();

jQueryप्लगइन दृष्टिकोण से ऊपर की आवश्यकता jQueryसे पहले प्लगइन प्रयोग किया जाता है लोड करने के लिए, और निश्चित रूप से अपने आप प्लगइन। यह इस प्लगइन की अनुपस्थिति थी जो मुझे शुद्ध वैनिला जावास्क्रिप्ट के साथ ही पूरा करने के वैकल्पिक तरीकों की तलाश में मिला।

शुद्ध जेएस दृष्टिकोण का उपयोग करके मैं उस पर भरोसा करने में सक्षम था जो मुझे (दूसरे कोड स्निपेट) की आवश्यकता थीjQuery :

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.