#javascript #html #arrays #dom-manipulation #htmlcollection
Вопрос:
Я пытаюсь просмотреть коллекцию HTMLCollection и добавить вновь созданный элемент к соответствующим дочерним элементам. Есть 3 условия, на которые я обращаю внимание, если у детей 1 из 3 классов:
- тип-халява
- тип-взлом
- тип-пост
Я смог настроить большую его часть и успешно прикрепить нужный мне элемент к каждой отдельной группе, однако, когда появляются два или более различных типа, добавляется только один, а другой-нет. Я попытался выяснить, в чем проблема, и я думаю, что это связано с тем, что htmlколлекции не работают как массивы, но я, похоже, не могу указать на это пальцем.
Я вставил фрагменты кода ниже того, что у меня есть до сих пор, и HTML-код, которым я пытаюсь манипулировать в DOM после этого.
Был бы признателен за любую информацию, которую я, возможно, упускаю.
const card_Group = jQuery('#latest-cst-query > .elementor-widget-container > .elementor-posts');
const cf_div = document.createElement("a");
const ch_p = document.createElement("a");
const cp_a = document.createElement("a");
for (cards of card_Group) {
let cardChild = cards.children;
for (card of cardChild){
if (card.classList.contains("type-freebie")){
cf_div.classList.add("freebie_tax", "freebie_fcol");
cf_div.innerText = "Freebie";
card.firstElementChild.append(cf_div);
} if (card.classList.contains("type-hack")){
ch_p.classList.add("freebie_tax", "freebie_hcol");
ch_p.innerText = "Hack";
card.firstElementChild.append(ch_p);
} if (card.classList.contains("type-post")) {
cp_a.classList.add("freebie_tax");
cp_a.innerText = "Blog";
card.firstElementChild.append(cp_a);
}
}
}
Ответ №1:
Проблема здесь в том, что вы создаете только один элемент в группе, а при добавлении во второй раз он фактически перемещается.
Поэтому все, что вам нужно сделать, это создать новый элемент до его добавления.
for (card of cardChild){
if (card.classList.contains("type-freebie")){
let cf_div = document.createElement("a");
cf_div.classList.add("freebie_tax", "freebie_fcol");
cf_div.innerText = "Freebie";
card.firstElementChild.append(cf_div);
}
Вы даже можете его клонировать:
const cf_div = document.createElement("a");
cf_div.classList.add("freebie_tax", "freebie_fcol");
cf_div.innerText = "Freebie";
for (card of cardChild){
if (card.classList.contains("type-freebie")){
card.firstElementChild.append(cf_div.cloneNode(true));
}
Комментарии:
1. Большое спасибо! Теперь я вижу проблему 🙏 🏾 и смог решить ее с помощью вашего решения. Спасибо за помощь!