2013-08-22 26 views
8

DOM như thế này:Có d3 có api tương tự với jQuery.closest (selector) không?

<g.module> 
    <g.control> 
    <rect> 

tôi không tìm thấy API gần nhất: https://github.com/mbostock/d3/wiki/API-Reference

Làm thế nào tôi có thể nhận được các yếu tố phù hợp gần nhất từ ​​nó cha mẹ? Chỉ cần như thế này:

var module = d3.select(".control").closest(".module"); 
+1

D3 không cung cấp bất kỳ chức năng để di chuyển lên cây DOM. –

Trả lời

0

Bạn có thể thực hiện lựa chọn với jquery và chuyển đến d3.

var selection = $('.control').closest('.module'); 
var module = d3.select(selection); 

này có thể hoặc không thể làm việc tùy thuộc vào những gì bạn cần nó cho, nhưng có thể là một cách giải quyết đơn giản.

0

Nếu DOM của bạn thực sự là ví dụ cụ thể, bạn có thể chọn nút cha mẹ với D3 như đã nêu trong tài liệu của họ here:

Bạn có thể thấy nút cha của từng nhóm bằng cách kiểm tra tài sản parentNode của mỗi nhóm mảng, chẳng hạn như lựa chọn [0] .parentNode.

Vì vậy, trong trường hợp của bạn, var module = d3.select(".control").parentNode; sẽ hoạt động.

1

Bạn có thể thêm "gần" với nguyên mẫu lựa chọn d3 như thế này:

d3.selection.prototype.closest = function(selector){ 
      var closestMatch = undefined; 
      var matchArr = []; 
      this.each(function(){ 
       var elm = this; 
       while(typeof elm.parentNode.matches === "function" && !closestMatch){ 
        elm = elm.parentNode; 
        if(elm.matches(selector)){ 
         closestMatch = elm; 
         matchArr.push(closestMatch); 
        } 
       } 
       closestMatch = undefined; 
      }); 
      return d3.selectAll(matchArr); 
     } 
Các vấn đề liên quan