javascript - 如何将 <span> 值绑定(bind)到 AngularJS 或 Jquery 中的雷达图字段名称

标签 javascript jquery angularjs radar-chart

我有下面的代码,其中包含根据输入生成的跨度列表

<div id="tags" style="border:none">
<span class="tag" id="4"></span>
<input type="text" id="inptags" value="" placeholder="Add max of 6 values  (enter,)" />
</div>            

例如,span标签是::

Movies, Housing, Bank, Holiday, Restaurant, Travel

对于上述每个名称,我的用户都会给出一些数字(1-20 内)

我正在尝试将这些名称绑定(bind)到我的 d3 雷达图输入名称

雷达图:

空雷达图由以下对象填充

dataset_v = {
            d0: { id: 0, name: '', value: 3 },
            d1: { id: 1, name: '', value: 3 },
            d2: { id: 2, name: '', value: 3 },
            d3: { id: 3, name: '', value: 3 },
            d4: { id: 4, name: '', value: 3 },
            d5: { id: 5, name: '', value: 3 }
        };

绘制图表的代码:

 <radial-plot dsn="dataset_v">

需要为输入范围值绑定(bind)此 dataset_v 变量名称字段。

比方说,如果我只输入一个输入范围 -> 我的图表应该只显示一个字段名称,并且值可以是任何默认值,直到用户更改为止 如果我输入两个输入范围值 -> 图表应显示这两个字段名称和默认值 ....

雷达图中的这些默认值稍后可以由用户根据自己的要求进行调整。

如何将输入范围值与 dataset_v 变量的名称绑定(bind)?

我已经做了一些工作并取得了一些进展,但我不相信。

我通过以下方法使用 javascript 手动创建了该方法,该方法有效,但正如您所见,它效率不高,因为我必须手动为每个标签设置条件。 示例:当标签为 3 -> 设置 dataset_v 为 3 个元素,当再次设置 4 时,当再次设置 5 时,...:

    $(function () {
        $('#tags input').on('focusout', function () {
            var txt = this.value.replace(/[^a-zA-Z0-9\+\-\.\#]/g, '');
            if (txt) {
                $(this).before('<span class="tag">' + txt.toLowerCase() + '</span>');
            }
            this.value = "";
        }).on('keyup', function (e) {
            // if: comma,enter (delimit more keyCodes with | pipe)
            if (/(188|13)/.test(e.which)) $(this).focusout();
            if ($('#tags span').length == 3) {
                var div = document.getElementById("tags");
                var spans = div.getElementsByTagName("span");
      dataset_v = {
            d0: { id: 0, name: '', value: 3 },
            d1: { id: 1, name: '', value: 3 },
            d2: { id: 2, name: '', value: 3 }
           };
            }
         if ($('#tags span').length == 4) {
                var div = document.getElementById("tags");
                var spans = div.getElementsByTagName("span");
        dataset_v = {
            d0: { id: 0, name: '', value: 3 },
            d1: { id: 1, name: '', value: 3 },
            d2: { id: 2, name: '', value: 3 },
            d2: { id: 3, name: '', value: 3 }
           };
            }
            if ($('#tags span').length == 8) {
                document.getElementById('inptags').style.display = 'none';
            }
        });
        $('#tags').on('click', '.tag', function () {
            $(this).remove();
            document.getElementById('inptags').style.display = 'block';
        });
    });

有没有办法动态绑定(bind)我的跨度输入值和我的 d3 雷达图变量的名称 - 使用普通的 jquery 或 Angular JS/Javascript?

屏幕截图

输入范围:

enter image description here

对于以下变量 dataset_v

dataset_v = {
        d0: { id: 0, name: 'Housing', value: 12 },
        d1: { id: 1, name: 'Movies', value: 5 },
        d2: { id: 2, name: 'Bank', value: 8 },
        d3: { id: 3, name: 'Holiday', value: 8 },
        d4: { id: 4, name: 'Restaurant', value: 6 },
        d5: { id: 5, name: 'Travel', value: 4 }
    }; 

雷达图如下所示:

enter image description here

最佳答案

我已经为此问题创建了一个测试用例。你可以这样做:

var div = $("#tags");
var spans = div.find("span");
var dataset_v = {}; // declare a blank object

spans.each(function(i, elem) { // loop over each spans
  dataset_v["d" + i] = { // add the key for each object results in "d0, d1..n"
    id: i, // gives the id as "0,1,2.....n"
    name: $(elem).text(), // push the text of the span in the loop
    value: 3 // you should add this value as per your need.
  }
});
// d0: { id: 0, name: '', value: 3 },

$('pre').append(JSON.stringify(dataset_v));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='tags'>
  <span>test1</span><span>test2</span><span>test3</span><span>test4</span><span>test5</span><span>test6</span>
</div>
<p><pre></pre>
</p>

关于javascript - 如何将 <span> 值绑定(bind)到 AngularJS 或 Jquery 中的雷达图字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33824020/

相关文章:

javascript - Netsuite - 设置部门的行项目值

javascript - RevealingPrototypePattern : TypeError: . ...不是构造函数

javascript - 如何在适用于 Chrome 或 Safari 的 iOS 上停止滚动 - CSS/JavaScript 或 jQuery

javascript - 显示来自 ajax 响应的图像

javascript - 在 AngularJS 回调中使用 $scope

javascript - AngularJS:指令 - 无需使用引号即可传递字符串

javascript - AngularJS 一个模板具有多个 Controller

javascript - 使特定的 <select> 选项自动选中并禁用另一个表单字段中的复选框

javascript - 如何从跨域页面中提取包含div?

javascript - 我正在制作一个循环的连续图像 slider ,但我无法很好地过渡