Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

160
Vistas
Deleting element with D3 fails

Deleting dom with D3 fails Hello everyone. I try to use D3 to manipulate doms, which are defined in html ahead of time. Content in html:

<div>
 <p class="child" id="1">James</p>
 <p class="child" id="2">Kate</p>

D3 code:

var div = d3.select('div')
var pp = div.selectAll('p.child');
var ppUpdate = pp.data(dataset, d =>d.id);
var ppexit = ppUpdate.exit();
ppexit.remove();

I use the following data for testing: var data1 = [{ id: 1, name: 'James' }, { id: 4, name: 'Jordan' }];

Error when running to "pp.data": enter image description here

I modified the relevant code to:

var ppUpdate = pp.data(dataset, d => {
   if(d){
     return d.id
   }
 });

There will be no errors. But "ppUpdate.exit();" doesn't return the record I want to delete, instead it returns both records in the html. Further tracing the code execution process, in the "bindKey" function in d3.js, the correct "keyValue" cannot be obtained. enter image description here

Please, how can I complete my function? thanks.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

The first argument in selection.data(), that you named d, is the datum of the element. The important information is that the key function is evaluated on the elements and on the data; however, the elements initially have no data bound to them, so the datum is null.

What you want is to get the element's id first:

var ppUpdate = pp.data(dataset, (d, i, n) => d ? d.id : n[i].id);

Notice that because you had an arrow function in your question I cannot use this, so I'm using n[i] to get the element.

Here is the working snippet:

var dataset = [{
  id: 1,
  name: 'James'
}, {
  id: 4,
  name: 'Jordan'
}];
var div = d3.select('div')
var pp = div.selectAll('p.child');
var ppUpdate = pp.data(dataset, (d, i, n) => d ? d.id : n[i].id);
var ppexit = ppUpdate.exit();
ppexit.remove();
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<div>
  <p class="child" id="1">James</p>
  <p class="child" id="2">Kate</p>
</div>

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda