2012-12-20 2 views
0

, 내가 할 수 아래 코드에서 내가 할 수있는 그런d3 선택기 : 코드에서는 작동하지만 콘솔에서는 작동하지 않습니다. 왜? D3를 사용

var labels = d3.select("div#labels").insert("svg:svg") 
    //.... 

:

>>> labels.selectAll("text") 
    // produces: TypeError: labels.select is not a function 

그리고 :

labels.selectAll("text") 
    //... act upon the selection... 

그러나 불을 지르고 콘솔에서

>>> d3.labels.selectAll("text") 
    //produces: TypeError: d3.labels is undefined 

ㅁㅁ 와이?

+3

나머지 코드는 보지 않고 "범위"라고 가정합니다. 'labels'은 더 작은 범위에서 간단하게 정의됩니다. 일단 Firebug 콘솔에 도달하면 더 이상 존재하지 않습니다. –

+0

더 많은 코드를 입력하십시오. 함수를 호출하는 컨텍스트가 무엇입니까? –

+0

ID가 '레이블'인 요소가 있습니다. 콘솔에서'labels'는 ID 라벨을 가진 DOM 요소 인'labels'라는 전역 변수를 참조합니다. –

답변

1

두 개의 서로 다른 labels 변수가 있다고 생각합니다. 로컬 및 글로벌.

로컬 var labels을 선언 한 곳에서 디버깅을 위해 전역 범위에 저장하십시오 (예 : window.locallabels = labels 통해). 그런 다음 콘솔 테스트에서 다른 레이블이 동일한 지 확인하십시오. 나는 그들이 아닌 것 같아요.

var labels = { text: "bla" }  // create a new object 

function fn(){ 
    var labels = { text: "bla" } // create another object 
    window.locallabels = labels // save it in global scope for debugging 
} 

fn(); 

console.log(labels, locallabels, labels == locallabels) //try this in console 
//console: Object { text="bla"} Object { text="bla"} false 
+0

범위 밖에있는 변수 이름이 아닌 선택기를 사용해서 만 선택할 수 있다고 생각합니다. 코드의 d3 메서드 체인에서'attr ("id", "labels")'을 사용하지 않았지만, 일단 내가 콘솔에서'>>> d3.select ('# labels ')'DOM 요소를 선택하는 경우와 컨텍스트에 더 이상 없을 때 파괴되는 지역 변수를 비교하는 경우입니다. 답변과 시간을 보내 주셔서 감사합니다. – Ricalsin

관련 문제