更改文本并从 dc.selectMenu 中删除 Select 全部
Change text and remove Select All from dc.selectMenu
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id = "selectbox"> </div>
<div id = "chart1"> </div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.5.0/d3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crossfilter/1.3.12/crossfilter.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dc/3.0.6/dc.min.js"></script>
<script>
var facts = crossfilter([
{"Period":"Jan-18","Department":"Dept 1","Percentage":0.2098},
{"Period":"Feb-18","Department":"Dept 1","Percentage":0.6058},
{"Period":"Mar-18","Department":"Dept 1","Percentage":0.691},
{"Period":"Jan-18","Department":"Dept 2","Percentage":0.2705},
{"Period":"Feb-18","Department":"Dept 2","Percentage":0.4113},
{"Period":"Mar-18","Department":"Dept 2","Percentage":0.3698},
{"Period":"Jan-18","Department":"Dept 3","Percentage":0.3239},
{"Period":"Feb-18","Department":"Dept 3","Percentage":0.4638},
{"Period":"Mar-18","Department":"Dept 3","Percentage":0.4036},
{"Period":"Jan-18","Department":"Dept 4","Percentage":0.8288},
{"Period":"Feb-18","Department":"Dept 4","Percentage":0.0809},
{"Period":"Mar-18","Department":"Dept 4","Percentage":0.9152},
{"Period":"Jan-18","Department":"All","Percentage":0.6104},
{"Period":"Feb-18","Department":"All","Percentage":0.3348},
{"Period":"Mar-18","Department":"All","Percentage":0.8257},
])
var PeriodDimension = facts.dimension( function (d) {return d.Period} );
var DeptDimension = facts.dimension( function (d) {return d.Department} );
dc.selectMenu("#selectbox")
.dimension(DeptDimension)
.group(DeptDimension.group())
.promptText("removethisline")
.controlsUseVisibility(true);
dc.renderAll();
</script>
</body>
两个问题
1) 如果您在 JSFiddle 中注意到,我们会在下拉列表中获取键和值。我们只需要键,即我们只需要下拉列表中的全部、部门一、部门二等。
2) 由于我已经有了内置数据的 "All" 选项,如何从下拉列表中删除 promptText 值?
有点buried in the documentation但是根示例显示了如何使用.title()
设置选项文本,如下所示:
.title(kv => kv.key)
第一个元素似乎是硬编码的,所以我会听 pretransition
事件并使用 attribute selector 选择 option
与空白值并将其删除:
selbox.on('pretransition', function() {
selbox.select('option[value=""]').remove();
})
.filter("Dept 1")
注意:如果您的行不完全不同,您可能 运行 进入其他图表时无法正确相加。
为了后代,上面的答案对我使用 CboxMenu 无效,但是这个有效:
cbox.filter("Dept 1")
.on('pretransition', function() {
cbox.selectAll('li:not(.dc-cbox-item)').remove();
})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id = "selectbox"> </div>
<div id = "chart1"> </div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.5.0/d3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crossfilter/1.3.12/crossfilter.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dc/3.0.6/dc.min.js"></script>
<script>
var facts = crossfilter([
{"Period":"Jan-18","Department":"Dept 1","Percentage":0.2098},
{"Period":"Feb-18","Department":"Dept 1","Percentage":0.6058},
{"Period":"Mar-18","Department":"Dept 1","Percentage":0.691},
{"Period":"Jan-18","Department":"Dept 2","Percentage":0.2705},
{"Period":"Feb-18","Department":"Dept 2","Percentage":0.4113},
{"Period":"Mar-18","Department":"Dept 2","Percentage":0.3698},
{"Period":"Jan-18","Department":"Dept 3","Percentage":0.3239},
{"Period":"Feb-18","Department":"Dept 3","Percentage":0.4638},
{"Period":"Mar-18","Department":"Dept 3","Percentage":0.4036},
{"Period":"Jan-18","Department":"Dept 4","Percentage":0.8288},
{"Period":"Feb-18","Department":"Dept 4","Percentage":0.0809},
{"Period":"Mar-18","Department":"Dept 4","Percentage":0.9152},
{"Period":"Jan-18","Department":"All","Percentage":0.6104},
{"Period":"Feb-18","Department":"All","Percentage":0.3348},
{"Period":"Mar-18","Department":"All","Percentage":0.8257},
])
var PeriodDimension = facts.dimension( function (d) {return d.Period} );
var DeptDimension = facts.dimension( function (d) {return d.Department} );
dc.selectMenu("#selectbox")
.dimension(DeptDimension)
.group(DeptDimension.group())
.promptText("removethisline")
.controlsUseVisibility(true);
dc.renderAll();
</script>
</body>
两个问题
1) 如果您在 JSFiddle 中注意到,我们会在下拉列表中获取键和值。我们只需要键,即我们只需要下拉列表中的全部、部门一、部门二等。
2) 由于我已经有了内置数据的 "All" 选项,如何从下拉列表中删除 promptText 值?
有点buried in the documentation但是根示例显示了如何使用
.title()
设置选项文本,如下所示:.title(kv => kv.key)
第一个元素似乎是硬编码的,所以我会听
pretransition
事件并使用 attribute selector 选择option
与空白值并将其删除:selbox.on('pretransition', function() { selbox.select('option[value=""]').remove(); }) .filter("Dept 1")
注意:如果您的行不完全不同,您可能 运行 进入其他图表时无法正确相加。
为了后代,上面的答案对我使用 CboxMenu 无效,但是这个有效:
cbox.filter("Dept 1")
.on('pretransition', function() {
cbox.selectAll('li:not(.dc-cbox-item)').remove();
})