Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

112
Visualizações
How to remove simultaneously both elements in DOM with the same ids in JavaScript?

What I am trying to do is, when I click on green element I want the purple one with the same id be removed. Now my problem is I can not loop through purple element's id and find the one which match with green one and then remove it from the DOM. I tried to use querySelectorAll but it doesn't work with addEventListener and when I use querySelector it just returns always the first element.So the goal is to remove both elements green and purple that has the same id.

if you see in HTML code inside the ul tag there is another one with the id container actually this is the problem the first ul tag with id main is the original one and the one inside it with id container it will be generated automatically with jQuery plugin if I set any new attribute to class main the class container will copy it. my goal is to click on green one and delete two elements from DOM. The one which I am clicking and another with same id. is there any way for that?

Has anyone solution for that how to remove simultaneously another element with the same id of clicked element?

document.addEventListener("DOMContentLoaded", () => {
  document.querySelector("ul").addEventListener("click", getItem)
})

function getItem(e) {
  let li = e.target.closest(".visible")
  let span = e.target
  let getID = span.attributes.id.value

  console.log("This is visible element", getID)


  if (li) {
    li.remove()
  }
}
#main {
  background-color: skyblue;
}

.hidden {
  border: solid 2px black;
  list-style: none;
  margin: 2px;
  background-color: #7d34eb;
}

#container {
  background-color: #3483eb;
  margin-top: 15px
}

.visible {
  border: solid 2px black;
  list-style: none;
  margin: 2px;
  background-color: #12a370;
}

span {
  position: relative;
  left: 1rem;
  padding: 50%;
  color: red;
  cursor: pointer;
}
<div class="content">

  <ul id="main">
    <li class="hidden">
      <span id="1">A</span>
    </li>

    <li class="hidden">
      <span id="2">B</span>
    </li>

    <li class="hidden">
      <span id="3">C</span>
    </li>

    <ul id="container">

      <li class="visible">
        <span id="1">A</span>
      </li>

      <li class="visible">
        <span id="2">B</span>
      </li>

      <li class="visible">
        <span id="3">C</span>
      </li>

    </ul>

  </ul>



</div>

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

I changed all your spans to div to fill up the LI element. I also changed all id to data-id, because id should be a unique.

EDIT: Based on the comment. In your original post, you added a click listener on the first UL that querySelector returns, which is #main. I made that more clear in the code. As the comment, in my answer, suggest, it's better to add a click listener to ul#container instead.

EDIT 2: Based on another comment. :P I added code for looping through and removing all elements with matching data-id.

document.addEventListener("DOMContentLoaded", () => {
  document.querySelector("ul#main").addEventListener("click", getItem);
})

function getItem(e) {
  let divEl = e.target;
  let dataset = divEl.dataset;
  let visibleLi = divEl.parentElement;
  let isVisibleElement = visibleLi.classList.contains('visible');
  let matchingDatasetDivs = document.querySelectorAll(`[data-id="${dataset.id}"]`);

  if (isVisibleElement)
    console.log("This is visible element", dataset.id);

  if (isVisibleElement && matchingDatasetDivs.length) {
    for (let i = 0; i < matchingDatasetDivs.length; i++) {
      let containerLi = matchingDatasetDivs[i].parentElement;
      containerLi.remove();
    }
  }
}
#main {
  background-color: skyblue;
}

.hidden, .visible {
  border: solid 2px black;
  list-style: none;
  margin: 2px;
  background-color: #7d34eb;
}

.visible {
  background-color: #12a370;
}

#container {
  background-color: #3483eb;
  margin-top: 15px
}

li > div {
  position: relative;
  left: 1rem;
  /* padding: 50%; */
  color: red;
  cursor: pointer;
  text-align: center; /* ADDED */
}
<div class="content">

  <ul id="main">
    <li class="hidden">
      <div data-id="1">A</div>
    </li>

    <li class="hidden">
      <div data-id="2">B</div>
    </li>

    <li class="hidden">
      <div data-id="3">C</div>
    </li>

    <ul id="container">

      <li class="visible">
        <div data-id="1">A</div>
      </li>

      <li class="visible">
        <div data-id="2">B</div>
      </li>

      <li class="visible">
        <div data-id="3">C</div>
      </li>

    </ul>

  </ul>



</div>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda