D3.js selection 태그 선택 및 조작 - select(), selectAll()
D3.js는 Select로 태그를 선택하고, 조작을 수행할 수 있다. select, enter selection, exit selection
Select 태그 선택
D3.js는 select(단일)
, selectAll(복수)
으로 태그를 선택한다. select
에서 대상이 여러 개인 경우 첫 번째 요소가 선택된다.
아래 테이블에서는 이해를 돕기 위해, D3.js를 jQuery와 Javascript 비교하고 있다.
셀렉터 | D3.js | jQuery | Javascript |
---|---|---|---|
태그 지정 | d3.select("p"); , d3.selectAll("p"); |
$("p"); |
document.getElementsByTagName("p"); |
ID 지정 | d3.select("#id"); |
$("#id"); |
document.getElementById("id"); |
클래스 지정 | d3.select(".cls"); , d3.selectAll(".cls"); |
$(".cls"); |
document.getElementsByClassName("cls"); |
셀렉터는 아래와 같이 메소드 체이닝으로 셀렉터를 작성하여, 요소를 특정 할 수 있다.
d3.select("#id").selectAll("p");
selection 태그 조작
Select된 객체를 태그를 조작하는 방법은 아래와 같다.
태그 조작에 대해서도 아래 테이블에서 맞찮가지고, D3.js를 jQuery와 Javascript 비교하고 있다.
동작 | d3 | jQuery | Javascript |
---|---|---|---|
속성 조회 | selection.attr("id"); |
selection.attr("id"); |
selection.getAttribute("id") ;` |
속성 추가 | selection.attr("id", "name"); |
selection.attr("id", "name"); |
selection.attrAttribute("id", "name"); |
속성 삭제 | selection.attr("id", null); |
selection.removeAttr("id"); |
selection.removeAttribute("id"); |
클래스 추가 | selection.classed("cls", true); |
selection.addClass("cls"); |
selection.classList.add("cls"); |
클래스 삭제 | selection.classed("cls", false); |
selection.removeClass("cls"); |
selection.classList.remove("cls"); |
스타일 조회 | selection.style("color"); |
selection.css("color"); |
selection.style.color; |
스타일 설정 | selection.style("color", "blue"); |
selection.css("color", "blue"); |
selection.style.color = "blue"; |
스타일 삭제 | selection.style("color", null); |
selection.css("color", ""); |
selection.style.color = ""; |
속성 값 조회 | selection.property("checked"); |
selection.prop("checked"); |
selection.checked; |
속성 값 설정 | selection.property("checked", true); |
selection.prop("checked", true); |
selection.checked = true; |
HTML 조회 | selection.html(); |
selection.html(); |
selection.innerHTML; |
HTML 설정 | selection.html("<p>값</p>"); |
selection.html("<p>값</p>"); |
selection.innerHTML = "<p>값</p>"; |
요소 추가 | selection.append("p"); |
selection.append("<p></p>"); |
selection.appendChild(document.createElement('div')); |
요소 삭제 | selection.remove(); |
selection.remove(); |
selection.parentNode.removeChild(selection); |
Select 기본 사용
먼저 예로서 다음과 같은 HTML을 만든다.
<div>
<div class="num">One</div>
<div class="num">Two</div>
<div class="num">Three</div>
<div class="num">Four</div>
</div>
<script src="https://d3js.org/d3.v7.min.js"></script>
select()
select()
메소드를 사용해 매치된 첫번째의 DOM 요소를 선택하여 스타일을 설정한다.
d3.select(".num")
.style("color", "red");
selectAll()
selectAll()
메소드로 매치된 모든 DOM 요소를 선택하여 스타일을 설정한다.
d3.selectAll(".num")
.style("font-size", "2em");
append()
append()
메소드로 요소를 추가할 수도 있다.
d3.selectAll(".num")
.append("span")
.text(" apple");
style()
의 func 인수
style 두 번째 인수에 고정 값이 아닌 함수 객체를 사용하여, 동적으로 스타일을 설정한다. 함수 객체의 인수에는 data
(이후에 다시 설명)와 index
(매치된 요소의 순번)가 전달된다.
d3.selectAll(".num")
.style("background-color", (data, index) => `hsl(${30 * index}, 50%, 90%)`);
data()
data()
를 사용하여 매치된 각 요소에 data
를 할당한다. 할당된 데이터는 style
등에 전달되는 함수의 첫 번째 인수로 전달된다.
DOM 요소의 수와 data
의 수에 따라 대응하고 있는 부분을 update selection 이라고 부른다.
d3.selectAll(".num")
.data([1, 2, 3, 4])
.style("margin-left", (data, index) => `${data}em`);
참고
최종 수정 : 2024-01-18