цикл jquery .each () - PullRequest
       11

цикл jquery .each ()

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

Я хочу прочитать все ссылки в ".vm-video-title" -divs и опубликовать их каждую в одном div. Итак, я сделал этот скрипт:

$('.vm-video-title').each(function(i) {//all divs
    $(this).html($(this).html()+$("div.vm-video-title>a").text());//add to div the link
    });

но у меня проблема в том, что он читает ВСЕ ссылки всех div и помещает их в один div.

пример:

<div class="vm-video-title"><a href="...">Text1</a></div>
<div class="vm-video-title"><a href="...">Text2</a></div>
<div class="vm-video-title"><a href="...">Text3</a></div>

выход:

<a href="...">Text1</a>Text1Text2Text3
<a href="...">Text2</a>Text1Text2Text3
<a href="...">Text3</a>Text1Text2Text3

желаемый вывод:

<a href="...">Text1</a>Text1
<a href="...">Text2</a>Text2
<a href="...">Text3</a>Text3

Ответы [ 3 ]

5 голосов
/ 10 июля 2011

Вы можете выбрать элементы <a> напрямую и использовать метод after() [документы] , чтобы добавлять содержимое каждого после каждого соответственно.

$("div.vm-video-title > a").after(function() { return $(this).text(); });

Это не делает "уничтожить, а затем воссоздать" существующих элементов, таких как html() [документы] метод будет.

Рабочий пример: http://jsfiddle.net/CCr9C/

4 голосов
/ 10 июля 2011

Это должно сделать работу за вас,

вам нужно найти div внутри текущего элемента в цикле (el).

$('.vm-video-title').each(function(i, el) {
    el = $(el);
    el.html(el.html()+el.find("a").text());
});

в вашем коде вы добавляете текст () всех совпадающих тегов "a" в свои элементы div (т.е. Text1Text2Text3)

2 голосов
/ 10 июля 2011

Вы были почти там. Вместо: $("div.vm-video-title").text(), который дает вам текст внутри любого div с классом vm-video-title, вам нужно найти тег a внутри текущего div и получить текст из него. Мы передаем this как context для выбора a внутри тока div jQuery( selector, [context] )

$('.vm-video-title').each(function(i) {//all divs
   $(this).html($(this).html()+$("a", this).text());
});
...