d3.js – d3js接受/恢复输入值

前端之家收集整理的这篇文章主要介绍了d3.js – d3js接受/恢复输入值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我填充一组文本输入字段,显示使用d3js的关联数组的值.用户更改了一些输入值.
  1. var obj = {a: 'Hello',b: 'World'}
  2. var kk = function(d){return d.key}
  3. var kv = function(d){return d.value}
  4. var upd = function(c){
  5. c.select('div.label').text(kk)
  6. c.select('div.input input').attr("value",kv)
  7. }
  8. var data = d3.entries(obj)
  9. var prop = d3.select("div.container").selectAll("div.prop").data(data,kk)
  10. upd(prop)
  11. var eprop = prop.enter().append("div").attr("class","prop")
  12. eprop.append("div").attr("class","label")
  13. eprop.append("div").attr("class","input").append("input").attr("name",kk)
  14. upd(eprop)
  15. prop.exit().remove()

什么是最好的做法
a)从DOM更新原始关联数组(相反方向)
b)将DOM值恢复为原始值

我目前的解决方案是
a)迭代输入字段d3.select(“div.container”).selectAll(“div.prop”).select(‘div.input input’).each(function(){obj [this.name] = THIS.VALUE})
b)将[]指定为选择数据然后返回原始数据(我没有找到类似强制更新或刷新的内容)

编辑(广义)
显示关联数组值的输入字段只是一种特殊情况,您可以想象在具有用户交互的模型上应用的任何d3js布局.
但一般来说:
a)接受DOM中的值返回源数据
b)将DOM还原为实际的源数据
是否有任何d3js内置支持或d3js插件

解决方法

你真的需要提供一些代码,因为从你的问题来看,很难说你如何使用d3来管理你的输入.我假设你是以某种方式绑定数据,所以我只是为了好玩而编码.它显示了一些使用enter / append,data()和datum()来管理输入组及其值的方法
  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5. <script data-require="d3@3.5.3" data-semver="3.5.3" src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.3/d3.js"></script>
  6. </head>
  7.  
  8. <body>
  9. <button id="report">Report</button>
  10. <button id="reset">Reset</button>
  11. <script>
  12. var data = [{
  13. v: Math.random()
  14. },{
  15. v: Math.random()
  16. },{
  17. v: Math.random()
  18. }];
  19.  
  20. var inputs = d3.select('body')
  21. .append('div')
  22. .selectAll('input')
  23. .data(data)
  24. .enter()
  25. .append('input')
  26. .attr('type','text')
  27. .attr('value',function(d) {
  28. return d.v;
  29. })
  30. .on('blur',function(d) {
  31. d._v = d.v;
  32. d.v = this.value;
  33. });
  34. d3.select('#report')
  35. .on('click',function(){
  36. alert(inputs.data().map(function(d){
  37. return d.v;
  38. }).join("\n"));
  39. });
  40. d3.select('#reset')
  41. .on('click',function(){
  42. inputs.each(function(d){
  43. if (d._v){
  44. this.value = d._v;
  45. d.v = d._v;
  46. d._v = null;
  47. }
  48. });
  49. });
  50. </script>
  51. </body>
  52.  
  53. </html>

猜你在找的JavaScript相关文章