insertAfter внутри цикла - PullRequest
       26

insertAfter внутри цикла

7 голосов
/ 28 июля 2011

У меня есть некоторый код, сгенерированный CMS:

<div class="block">
  <a class="link" href="#">Link</a>
  <h4>Header here</h4>
  <div class="text">Some text here</div>
</div>

, и мне нужно переместить ссылку после текста div.Я пробовал это:

$(document).ready(function() {
        $('.block').each(function() {
            $('.block a.link').insertAfter('.block div.text');                      
        });
    });

, но это приводит только к тому, что ссылки повторяются примерно 10 раз (количество циклов.

Я пытался использовать $ (this), но неЯ понимаю, как написать правильный синтаксис для добавления a.link в функцию ... вот так:

 $(this).a.link.insertAfter($(this).div.text);

Ответы [ 4 ]

8 голосов
/ 28 июля 2011

Как-то так должно работать, используя siblings и after:

$('.block a.link').each(function() {
    $(this).siblings('.text').after(this);
});

с надписью «для каждого соответствующего элемента найдите элемент, соответствующий .text, и вставьте после него оригинальный элемент»".

В качестве альтернативы вы можете сделать это:

$('.block a.link').each(function() {
    $(this).parent().append(this);
});

Это предполагает, что вы хотите поместить элемент в конец div.block.

1 голос
/ 28 июля 2011

Попробуйте это:

$(document).ready(function() {
            $('.block').each(function() {
                var divtext = $('div.text', this)
                $('a.link', this).insertAfter(divText);
            });
});
1 голос
/ 28 июля 2011

Вы можете сделать (если хотите после div с текстом класса):

$(document).ready(function() {
    $('.block a').each(function(){
       $(this).next('div.text').after(this);
    });
   });

или (если хотите после div с блоком класса)

$(document).ready(function() {
    $('.block a').each(function(){
       $(this).closest('div.block').after(this);
    });
   });
0 голосов
/ 28 июля 2011

Попробуйте это

$('div.block a.link').each(function() {
    $(this).siblings('div.text').after(this);
});
...