2017-01-09 6 views
0

jQueryを使用して関数内のオブジェクトの要素にアクセスしたり変更することは可能ですか?たとえば、別のjQuery関数を使用して、このJSfiddle上のJSの33行目にアクセスし、チャートのタイトルの内容を動的に変更できますか?jQueryを使用してこのスクリプトでネストされた値を選択および編集する

(私は運で、このようなtext: myObj.title,などのオブジェクトのプロパティを参照してtext: 'Activity',を交換しようとしました)

$(function() { 
 

 
    // Uncomment to style it like Apple Watch 
 
    /* 
 
    if (!Highcharts.theme) { 
 
     Highcharts.setOptions({ 
 
      chart: { 
 
       backgroundColor: 'black' 
 
      }, 
 
      colors: ['#F62366', '#9DFF02', '#0CCDD6'], 
 
      title: { 
 
       style: { 
 
        color: 'silver' 
 
       } 
 
      }, 
 
      tooltip: { 
 
       style: { 
 
        color: 'silver' 
 
       } 
 
      } 
 
     }); 
 
    } 
 
    // */ 
 

 
    Highcharts.chart('container', { 
 

 
     chart: { 
 
      type: 'solidgauge', 
 
      marginTop: 50 
 
     }, 
 

 
     title: { 
 
      text: 'Activity', 
 
      style: { 
 
       fontSize: '24px' 
 
      } 
 
     }, 
 

 
     tooltip: { 
 
      borderWidth: 0, 
 
      backgroundColor: 'none', 
 
      shadow: false, 
 
      style: { 
 
       fontSize: '16px' 
 
      }, 
 
      pointFormat: '{series.name}<br><span style="font-size:2em; color: {point.color}; font-weight: bold">{point.y}%</span>', 
 
      positioner: function (labelWidth) { 
 
       return { 
 
        x: 200 - labelWidth/2, 
 
        y: 180 
 
       }; 
 
      } 
 
     }, 
 

 
     pane: { 
 
      startAngle: 0, 
 
      endAngle: 360, 
 
      background: [{ // Track for Move 
 
       outerRadius: '112%', 
 
       innerRadius: '88%', 
 
       backgroundColor: Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0.3).get(), 
 
       borderWidth: 0 
 
      }, { // Track for Exercise 
 
       outerRadius: '87%', 
 
       innerRadius: '63%', 
 
       backgroundColor: Highcharts.Color(Highcharts.getOptions().colors[1]).setOpacity(0.3).get(), 
 
       borderWidth: 0 
 
      }, { // Track for Stand 
 
       outerRadius: '62%', 
 
       innerRadius: '38%', 
 
       backgroundColor: Highcharts.Color(Highcharts.getOptions().colors[2]).setOpacity(0.3).get(), 
 
       borderWidth: 0 
 
      }] 
 
     }, 
 

 
     yAxis: { 
 
      min: 0, 
 
      max: 100, 
 
      lineWidth: 0, 
 
      tickPositions: [] 
 
     }, 
 

 
     plotOptions: { 
 
      solidgauge: { 
 
       borderWidth: '34px', 
 
       dataLabels: { 
 
        enabled: false 
 
       }, 
 
       linecap: 'round', 
 
       stickyTracking: false 
 
      } 
 
     }, 
 

 
     series: [{ 
 
      name: 'Move', 
 
      borderColor: Highcharts.getOptions().colors[0], 
 
      data: [{ 
 
       color: Highcharts.getOptions().colors[0], 
 
       radius: '100%', 
 
       innerRadius: '100%', 
 
       y: 80 
 
      }] 
 
     }, { 
 
      name: 'Exercise', 
 
      borderColor: Highcharts.getOptions().colors[1], 
 
      data: [{ 
 
       color: Highcharts.getOptions().colors[1], 
 
       radius: '75%', 
 
       innerRadius: '75%', 
 
       y: 65 
 
      }] 
 
     }, { 
 
      name: 'Stand', 
 
      borderColor: Highcharts.getOptions().colors[2], 
 
      data: [{ 
 
       color: Highcharts.getOptions().colors[2], 
 
       radius: '50%', 
 
       innerRadius: '50%', 
 
       y: 50 
 
      }] 
 
     }] 
 
    }, 
 

 
    /** 
 
    * In the chart load callback, add icons on top of the circular shapes 
 
    */ 
 
    function callback() { 
 

 
     // Move icon 
 
     this.renderer.path(['M', -8, 0, 'L', 8, 0, 'M', 0, -8, 'L', 8, 0, 0, 8]) 
 
      .attr({ 
 
       'stroke': '#303030', 
 
       'stroke-linecap': 'round', 
 
       'stroke-linejoin': 'round', 
 
       'stroke-width': 2, 
 
       'zIndex': 10 
 
      }) 
 
      .translate(190, 26) 
 
      .add(this.series[2].group); 
 

 
     // Exercise icon 
 
     this.renderer.path(['M', -8, 0, 'L', 8, 0, 'M', 0, -8, 'L', 8, 0, 0, 8, 'M', 8, -8, 'L', 16, 0, 8, 8]) 
 
      .attr({ 
 
       'stroke': '#303030', 
 
       'stroke-linecap': 'round', 
 
       'stroke-linejoin': 'round', 
 
       'stroke-width': 2, 
 
       'zIndex': 10 
 
      }) 
 
      .translate(190, 61) 
 
      .add(this.series[2].group); 
 

 
     // Stand icon 
 
     this.renderer.path(['M', 0, 8, 'L', 0, -8, 'M', -8, 0, 'L', 0, -8, 8, 0]) 
 
      .attr({ 
 
       'stroke': '#303030', 
 
       'stroke-linecap': 'round', 
 
       'stroke-linejoin': 'round', 
 
       'stroke-width': 2, 
 
       'zIndex': 10 
 
      }) 
 
      .translate(190, 96) 
 
      .add(this.series[2].group); 
 
    }); 
 

 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://code.highcharts.com/highcharts.js"></script> 
 
<script src="https://code.highcharts.com/highcharts-more.js"></script> 
 
<script src="https://code.highcharts.com/modules/solid-gauge.js"></script> 
 

 
<div id="container" style="width: 400px; height: 400px; margin: 0 auto"> 
 
</div>

答えて

1

私は、.chartメソッド(2番目のパラメータ)でオプションを提供するための別のオブジェクトを作成することをお勧めします。 chartメソッドを実行する前にoption.title.textに必要な値を設定することができます。メソッドの実行後に値を変更すると、変更は反映されません。

しかし、チャートが作成された後に値を変更する場合は、Highchartsプラグインのドキュメントを参照する必要があります。

願っています。

1

いいえ、スクリプトは自己実行匿名関数である、あなたはそれが範囲外になるため、内部の何にでもアクセスすることはできません。その関数内のスコープは、その内部の他のメンバーによってのみアクセスできます。

内部で何かにアクセスする唯一の方法は、その値またはメソッドを内部からwindowオブジェクトに接続することです。これは本質的にJavascriptの「グローバル」スコープです。

window.whatever = 'something'; 

次に、別のスクリプトからアクセスできるようになります。

console.log(window.whatever); 
関連する問題