2014-08-28 67 views
0

jsFiddle Here獲取的這個id屬性與D3

lineID = d3.select(this.firstChild).attr('id'); // setting the line id 
textID = d3.select(this.lastChild).attr('id'); // setting the text id 

在這種情況下,我想行與標籤移動它拖時。
所以只有線的x2和y2屬性會被更新,並且線的x1和y1應該保持不變。
這裏firstChild和lastChild的用法可能不是理想的解決方案。 x1和y1現在硬編碼了,我不知道如何動態返回值。

+0

你爲什麼不簡單地翻譯'g'元素? – 2014-08-28 08:58:07

+0

@LarsKotthoff他希望'x1','y1'保持不變。如果你翻譯'g's,那麼這是行不通的(而且他沒有它們,可惜...) – Oleg 2014-08-28 09:14:17

回答

0

.text選擇上調用您的拖動,如this example,而不是svg根元素。

g.selectAll(".text") 
    ... 
    .call(drag); 

然後,訪問IDS:

var textID = this.id; // this = current text element 
var lineID = 'line' + textID.slice(-1); // your custom line id 

編輯

另外,如果你想離開x1y1一樣的,你可以忽略它們在你的更新行爲:

d3.select("#"+ lineID) 
    .attr("x2", newx2) 
    .attr("y2", newy2); 

並且因此.text不會在拖動時跳躍,只需使用transform,而無需設置xy偏移量(默認情況下它們將爲0)。

g.selectAll(".text") 
    ... // no .attr('x', ...) or y here 
    .attr("transform", function(d) { 
     return "translate(" + (d.x + 10) + "," + (d.y - 30) + ")"; 
    }) 
    ...; 

這是DEMO

+0

不知何故,翻譯位在實際項目中不能很好地工作,可能沒有正確設置它。不管怎樣,謝謝。 – user2901633 2014-08-29 02:55:29