D3.select ID возвращает ноль, несмотря на существующий элемент с идентификатором - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь выбрать на основе идентификатора для различных элементов в форсированном графе.Я могу выбрать узел и его метку на основе их идентификатора без проблем, но когда я пытаюсь выбрать ссылку, он просто возвращает ноль, как это - (в *)

ut {_groups: Array(1), _parents: Array(1)}
_groups: Array(1)
0: Array(1)
****0: null****
length: 1
__proto__: Array(0)
length: 1
__proto__: Array(0)
_parents: [html]
__proto__: Object

Однако, когдаЯ регистрирую выбранный идентификатор и сравниваю его с элементами в инспекторе, есть элементы с точно совпадающим идентификатором, который выбирается.Например, ссылка будет d3.select("#P DataIns"), и если я проверю связь между данными P и Ins, она покажет <line id="P DataIns"></line>

            var childNode = d3.select("#" + checkingNode.id);
            childNode.style("opacity", 1);
            childNode.style("stroke", highlight_color);

            var childLink = d3.select("#" + node2.id + checkingNode.id);
            childLink.style("opacity", 1);
            childLink.style("stroke", highlight_color);

            var childLabel = d3.select("#" + checkingNode.id + "label");
            childLabel.style("opacity", 1);
            childLabel.style("font-weight", "bold");

Это код, который я использую для выбора, только средний код для выборадочерняя ссылка не работает.Есть ли что-то, что я делаю неправильно в этом, отличном от двух других, что могло бы вызвать это?Все идентификаторы используют только буквы или пробелы.Для справки ссылки создаются следующим образом -

link = link.data(config.links, d => d.id);
    link.exit().remove();
    link = link.enter().append("line")
            .attr("id", function (d) {
                return d.source + d.target;
            })
            .attr("class", "link")
            .attr("stroke-width", 2)
            .attr("stroke", "#888")
            .merge(link); 

Я просмотрел статью Майка Бостока о том, как работают выборки, и мне кажется, что это должно работать ...

1 Ответ

0 голосов
/ 03 декабря 2018

Благодаря помощи комментариев я обнаружил, что проблема связана с идентификаторами ссылок, в которых есть пробелы.Однако узлы также имели пробелы и работали просто отлично.

Несмотря на это, я решил эту проблему для всех, кто придет позже, просто добавив

.replace(/\s/g, '')

, когда идентификаторы были загруженыиз данных JSON, чтобы удалить все пробелы и выбор ссылок начал работать.

...