2013-10-07 36 views
2

代碼鏈接:http://jsfiddle.net/mj58659094/yKUsQ/;d3.js家譜配偶亮點

enter image description here

當一個人(節點)上點擊,它選擇配偶也。我只想選擇(突出顯示)我點擊的人(丈夫或妻子或小孩)。 (當我檢查FireBug中的html時,配偶節點(g transform =「translate(0,70)」)在人員節點內部,我認爲他們應該在外面,但是在g class =「node」組內)。我不知道如何解決這個問題。任何人,請幫助。謝謝。

+0

我認爲問題在於你如何添加配偶。現在,「person配偶」可以是一個人的列表,但是你的樹中沒有一個配偶有一個以上的配偶。我嘗試在你的小提琴中向拳頭個人添加多於一個配偶,並且她沒有被繪製。如果你希望人們能夠擁有多個配偶,我會先解決這個問題,因爲我認爲解決這個問題在那之後會很簡單。 – mdml

+0

@ mtitan8感謝您的快速響應。我原來的json數據包含多個配偶,我縮短了它爲jsFiddle。這是一個多配偶http://jsfiddle.net/mj58659094/StWcr/1/。在json中,personId:「1000101」Father-3(SMJ),結婚兩次,第一位妻子是personId:「1000102」,第二位妻子是personId:「1000103」,第二位配偶沒有顯示,但那是另一個問題。 – mj8591

回答

4

更新時間:編輯下面

我認爲你是正確的,最好的辦法來解決你的onclick問題是保持一個人的配偶在同一組的人(而不是在嵌套組) 。除此之外,我認爲你在錯誤的地方應用onclick。我的建議是

  1. 變更線325-330以下

    var node = g.append("svg:g").attr("class", "node") 
        .selectAll("g") 
        .data(function (d) { return d.nodes; }) 
        .enter().append("svg:g"); 
    
    node.append("svg:rect") 
        .on("click", clickedNode); 
    

    目前,你在應用onclick含有的人,他/她的配偶組,而不是你想分別在每個人/配偶身上使用onclick。請注意,一旦進行此更改,您需要更新代碼以測試每個節點的rect(而不是節點的組g)是否已選擇(第355-365行)。您還必須將CSS更新爲您的CSS文件第25和29行的.node rect.normal.node rect.selected

  2. 第二個問題是,你只是繪製每個人的第一個配偶。目前,updateSpouses函數遍歷每個人,然後爲第一個配偶添加一個矩形的組。你需要做的是首先爲每個配偶和每個人的配偶添加一個小組。這裏是你開始的如何修改updateSpouses得到一個粗略的草稿:

    var node = svgTree.selectAll(".node g") 
        .append("svg:g").attr("transform", function (d, i) { 
        if (i == d3.familyTree.rootGeneration) 
         return "translate(" + (d.spouseX) + "," + (d3.familyTree.gapBetweenSpouses) + ")"; 
        else 
         return "translate(" + 0 + "," + (d3.familyTree.gapBetweenSpouses) + ")"; 
        }) 
        .filter(function (d, i) { return personSpouses" in d }); 
    
    var spouses = node.selectAll(".spouse") 
        .data(function(d){ return d.personSpouses }).enter() 
        .append("rect") 
        .on("click", clickedNode); 
    

編輯

在回答您的意見,我說幹就幹,修改原密碼http://jsfiddle.net/mdml/xJBXm/。下面是我所做的更改的快速摘要:

  1. 我把每個人一個組,然後有自己的onclick屬性(線141-146),這樣,當你點擊矩形/文clickedNode是調用。
  2. 我還將每組配對放在一組中(如上所述),以便每個配偶都可單獨點擊(第229-232行)。
  3. 我修改了resetNodePersonSelectedsetNodePersonSelected的功能,以便他們除了孩子以外還搜索/更新配偶。

我已經描述了上面高層次的變化,但是讓我知道你是否對實現有更多的問題。

+1

再次感謝您花時間瀏覽我的代碼。我已經嘗試了onClick方案。在這種情況下,只有矩形變成可點擊。如果您將鼠標懸停在名稱文本上,則它們不可點擊。這就是爲什麼click事件附加到g元素。謝謝。 – mj8591

+1

關於能夠點擊文本的好處。看到我上面更新的答案。 – mdml

+0

非常感謝。您的解決方案完美運作讓我實施多配偶方案。再次,謝謝你。 – mj8591