Вы чрезмерно используете функцию jquery ($j()
, в вашем случае) и делаете что-то в неправильном порядке. Кроме того, могут быть случаи (возможно), например, что $(this).find('img')
может возвращать более одного элемента ... Хотя не уверен в вашем сценарии.
Попробуйте это (может быть не идеально, но это должно склонить вас в правильном направлении):
$j('#sub > div[id^="post-"]').each(function() {
var sid = this.id.match(/^post-([0-9]+)$/);
var sfimg = $j(this).find("img");
var sfhh = $j(this).find("h2");
var sfpt = $j(this).find("p:not(:has(img)):eq(0)");
var more = 'more';
sfimg.wrap($j('<a>').attr('href', '/blog/?p='+sid[1]));
$j(this).html(sfimg);
sfpt.wrap($j('<div>').attr('class', 'sfentry'));
// You do realize what you have will append the paragraph to your h2 tag, right?
// I think you want:
/*
$j(this).append(sfhh).end().append(sfpt);
*/
$j(this).append(sfhh).append(sfpt);
$j(this).append('<div class="morelink">'+more+'</div>');
$j('.morelink',this).wrap($j('<a>').attr('href', '/blog/?p='+sid[1]));
});
В этом коде происходили разные сумасшедшие вещи. Помните, что вам нужно изменить объекты перед добавлением их к другому объекту (если у вас нет уникального способа идентифицировать их после факта, то есть идентификатора).
Удачи.