2016-02-22 2 views
1

Мне нужно использовать JS для создания нового элемента внутри определенных вложенных классов в HTML. Поэтому в этом примере мне нужно создать новый диапазон с классом «paw-print» только там, где класс «collies» вложен в «собак».Добавление нового элемента в вложенные классы

Вот что я до сих пор: https://jsfiddle.net/p50e228w/6/

Проблема заключается в том, что мой нынешний JS работает по первой инстанции, но не на другой. В настоящее время у меня есть document.getElementsByClassName, установленный в «collies», но мне нужно настроить этот класс только тогда, когда он находится внутри родительского класса «собаки».

Что мне здесь не хватает?

var span = document.createElement("span"); 
span.className = "paw-print"; 
var wrap = document.getElementsByClassName("collies"); 
for(var i = 0; i < wrap.length; i++) { 
    wrap[i].appendChild(span); 
} 

Я могу использовать JQuery, но я использую ваниль JS только потому, что я такой нуб и хочу, чтобы понять, что делает мой код.

+1

Проблема с вашим 'absolute' позиционирования в CSS, а не Javascript –

+0

я установил CSS, чтобы сделать его более точным. Вот обновленная скрипка: https://jsfiddle.net/p50e228w/3/ ... Но если бы это было просто позиционирование, разве у меня не было бы более одного пролета? – crezaii

+1

Проблема с ['.appendChild'] (https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild) заключается в том, что она не _clone_. Если вы ссылаетесь на существующий диапазон, он просто перемещает его в новое место в документе. Вот почему ваш конечный результат имеет только 1 пролет. – Stryner

ответ

2

Есть 2 проблемы с вашим кодом.

  • Позиционирование: изображения получают абсолютное положение, и они располагаются в том же положении, что и на макете страницы. Поэтому установите относительное позиционирование для родительского контейнера.

CSS

.relative { 
    position: relative; 
} 
  • Вам нужно добавить, что родительский элемент, который collie здесь.

Вы можете использовать querySelectorAll, чтобы найти судно вложенного отношения, которое вы ищете.

Fiddle

+0

Это то, что сработало. Благодаря! – crezaii

+0

@crezaii Рад помочь! –

2

Если вы хотите добавить к родителю (элемент с классом «собака»)

$('.dogs .collies').each(function() // finds elements in the dom with parent element 'dog' and it's child element 'collies' 
{ 
    $(this) // 'this' would represent 'collies' element 
.closest('.dogs') // .closest('.dogs') would get it's nearest occurence in the heirarchy (basically it's parent) 
.append($('<span/>', { class: 'paw-print'})); // create a dynamic span element and append to 'this' 
}); 

Если вы хотите добавить к ребенку (элемент с «колли» класса)

$('.dogs .collies').each(function() 
{ 
    $(this).append($('<span/>', { class: 'paw-print'})); 
}); 

В дополнение к этому, вам также необходимо установить position: relative, как указано Робом.

Пример: https://jsfiddle.net/DinoMyte/1zxn8193/1/

+0

Вам необходимо сделать родительский div-родственник, чтобы он работал, см. Https://jsfiddle.net/1zxn8193/ –

+0

Yup. Спасибо что подметил это. – DinoMyte

Смежные вопросы