d3.js在綁定數(shù)據(jù)后冻晤,一般會看到enter
或exit
兩個(gè)函數(shù)。那它們到底是做什么用的呢?直接看一下代碼和效果:
既然是JavaScript的框架,我們就用一個(gè)HTML文檔作為測試的起點(diǎn)偶宫。
<html>
<head>
<meta charset="utf-8">
<title>d3.js Test</title>
</head>
<body>
<p>原始數(shù)據(jù):1</p>
<p>原始數(shù)據(jù):2</p>
<script type="text/javascript" src="./d3/d3.js"></script>
<script type="text/javascript">
//JS代碼所在位置
</script>
</body>
</html>
1 .當(dāng)DOM中元素多于所綁定的數(shù)據(jù)個(gè)數(shù)時(shí),使用enter
配合append
函數(shù)可以給文檔添加缺少的元素环鲤。
var ds = [1, 2, 3, 4, 5];
var body = d3.select('body'); //選擇body節(jié)點(diǎn)
body.selectAll('p')
.data(ds)
.enter()
.append('p')
.text(function(d) {
return "數(shù)據(jù):" + d;
});
結(jié)果HTML為:
<html>
<head>
<meta charset="utf-8">
<title>d3.js Test</title>
</head>
<body>
<p>原始數(shù)據(jù):1</p>
<p>原始數(shù)據(jù):2</p>
<script type="text/javascript" src="./d3/d3.js"></script>
<script type="text/javascript">
var ds = [1, 2, 3, 4, 5];
var body = d3.select('body'); //選擇body節(jié)點(diǎn)
body.selectAll('p') //選擇所有p標(biāo)簽
.data(ds) //綁定數(shù)據(jù)集
.enter()
.append('p')
.text(function(d) {
return '數(shù)據(jù):' + d;
});
</script>
</body>
</html>
2 . exit
函數(shù)配合remove
則剛好相反纯趋,能夠把多于數(shù)據(jù)集的部分從文檔中移除。
var ds = [1];
var body = d3.select('body'); //選擇body節(jié)點(diǎn)
body.selectAll('p') //選擇所有p標(biāo)簽
.data(ds) //綁定數(shù)據(jù)集
.exit()
.remove();
結(jié)果HTML文檔為:
<html>
<head>
<meta charset="utf-8">
<title>d3.js Test</title>
</head>
<body>
<p>原始數(shù)據(jù):1</p>
<script type="text/javascript" src="./d3/d3.js"></script>
<script type="text/javascript">
var ds = [1];
var body = d3.select('body'); //選擇body節(jié)點(diǎn)
body.selectAll('p') //選擇所有p標(biāo)簽
.data(ds) //綁定數(shù)據(jù)集
.exit()
.remove();
</script>
</body>
</html>