Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript d3.js迭代订单更改_Javascript_D3.js - Fatal编程技术网

Javascript d3.js迭代订单更改

Javascript d3.js迭代订单更改,javascript,d3.js,Javascript,D3.js,作为了解d3.js的项目,我正在地图上实时显示推文。到目前为止,一切都很顺利,我对图书馆非常非常满意 在页面上,我试图列出所有语言。在悬停状态下,我希望该语言的所有推文都能弹出。所有这些都完成了,除了列表中的一些项目会弹出另一种语言的tweet。一个错误的,我可能会补充 这就是我在地图上投射点的方式: points.selectAll('circle') .data(tweets) .enter() .append('circle') // Attach no

作为了解d3.js的项目,我正在地图上实时显示推文。到目前为止,一切都很顺利,我对图书馆非常非常满意

在页面上,我试图列出所有语言。在悬停状态下,我希望该语言的所有推文都能弹出。所有这些都完成了,除了列表中的一些项目会弹出另一种语言的tweet。一个错误的,我可能会补充

这就是我在地图上投射点的方式:

points.selectAll('circle')
    .data(tweets)

    .enter()
    .append('circle')

    // Attach node to tweet, so I can use refer to the nodes later
    .each(function(d) {
        d.node = this;
    })

    .attr('r', 1);
以下是我创建列表的方式:

var data = d3.nest()

    // Group by language code
    .key(function(d) { return d.lang.code; })
    .entries(tweets)

    // Sort list by amount of tweets in that language
    .sort(function(a, b) {
        return b.values.length - a.values.length;
    });


var items = languages_dom

    // Add items
    .selectAll('li')
    .data(data)
    .enter()
    .append('li');

    // Used for debugging
    .attr('data-lang', function(d) {
        return d.key; // Group key = language code
    })

    // Set text
    .text(function(d) {
        var dt = d.values[0];
        return dt.lang.name;
    })

    // Mouseover handler
    .on('mouseover', function(d) {

        // Compare attribute with 
        // These values are actually different
        var attr = d3.select(this).attr('data-lang');
        console.log(attr, d.key);

        // Pop up each node
        d.values.forEach(function(d) {
            d = d3.select(d.node);

            d.transition()
                .duration(200)
                .attr('opacity', 0.5)
                .attr('r', 8);
        });
    });
请注意,上面的脚本运行了多次
d.key
引用链中稍后的另一个值,而我不修改该链中的数据


编辑22:08
当我不整理数据时,事情似乎很顺利。至少这是一个潜在客户。

如评论中所述,您正在覆盖forEach函数中的d。相反,你应该尝试以下方法

    d.values.forEach(function(p) {
        d3.select(p.node)
            .transition()
            .duration(200)
            .attr('opacity', 0.5)
            .attr('r', 8);
    });

请注意,forEach变量的名称是p而不是d。

随着数据的更改,旧数据似乎以某种方式保留了下来

无论哪种方式,我只是在应用新数据之前删除了列表:

languages_dom
    .selectAll('li')
    .remove();

不能说这是优雅的,也不能说是性能良好的,但它完成了任务:)

看起来您正在覆盖此处的数据:
d=d3.select(d.node)。谢谢您的回答。我试过了,但没用。事件处理程序中的
console.log
仍然显示不一致的结果。