d3によって作成されたSVGオブジェクトにポリゴンがあります。クリックすると、2つのボタンがある「ブートストラップポップオーバー」が開きます。リンクをクリックしてポリゴンを変換できるようにしたい(究極の目標はポリゴンの上に円を描くことです)。今のところ、主な問題はポリゴンを選択してその属性を変更できないということです。ここ は私のコードです:d3を使用して特定のsvgオブジェクトを選択する
// create an svg element and append it
canvas = d3.select("#map")
.append("svg")
.attr("width", 500)
.attr("height", 500)
.attr("id", "firstFloor");
// draw polygon
var coverageAreaIDA1 = 'roomA1';
var content = '<button id="view" class="btn btn-sm btn-primary view-cam-btn">View Camera</button> <button id="set" class="btn btn-sm btn-primary set-dest-btn">Set Destination</button> <input type="hidden" name="coverage-area-id" value="'+coverageAreaIDA1+'">';
var polygonA1 = [[65, 215], [65, 250], [140, 250], [140, 215]];
var roomA1 = canvas.append("polygon")
.attr("points", polygonA1)
.attr("class", "coverage-area")
.attr("id", coverageAreaIDA1)
.attr("data-toggle", "popover")
.attr('data-placement', 'top')
.attr("data-content", content)
.attr("tabindex", "0")
.attr("data-trigger", "focus");
私はそれを入れて、私がこれまで持っている最も近い(ポリゴンIDと同じである)、その値をポップオーバーのボタンを選択している、多くの方法を試してみました以下のコードのように、d3を使用してポリゴンを選択します。
function badGuy() {
$(document).on('click', '.view-cam-btn', function(){
var coverageAreaID = $(this).nextAll('input').eq(0).val();
var selection = canvas.select("#" + coverageAreaID).styles("fill", "purple");
console.log('Selected polygon has ID '+selection.attrs('id'));
});
}
は私がそのtruthinessをテストするとき、それはtrueを返しますので、「選択」が空またはnullでないことを知っているが、上記にconsole.logはを返し「を選択したポリゴンはID [オブジェクトのオブジェクト]を持っている」としませんポリゴンのスタイルを変更します。
はPS:私はStackOverflowの上の多くの質問/回答を見ることで、代わりにATTRのattrsにし、代わりにスタイルのスタイルを使用していますなぜあなたは迷っているならば、私はこのライブラリ
<script src="https://d3js.org/d3-selection-multi.v0.4.min.js"></script>
を追加する必要があります考え出しattrsとスタイルを使用します。その前に、console.logは何も返さなかった。
編集:フルコード:コードのための https://codepen.io/navidfalla/pen/xrpzXE
お役に立てば幸いです誤解しました。 – Fered
完全なコードは次のとおりです。 https://codepen.io/navidfalla/pen/xrpzXE これは数百行のコードなので、できるだけシンプルにしようとしました。右側にあるポリゴンをクリックするとポップオーバーが表示され、ポップオーバー内のボタンを選択する必要があります。 –