0

我试图more变成一个超链接,但这就像它完全忽略了最后一个包装。

   $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';
            $j(this).html(sfimg);
            $j(sfimg).wrap($j('<a>').attr('href', '/blog/?p='+sid[1]));
            $j(this).append(sfhh).append(sfpt);
            $j(sfpt).wrap($j('<div>').attr('class', 'sfentry'));
            $j(this).append('<div class="morelink">'+more+'</div>');
            $j(more).wrap($j('<a>').attr('href', '/blog/?p='+sid[1]));
    });
4

2 回答 2

0

为什么你期望 $j(more) 匹配任何东西?

于 2009-10-07T14:49:45.207 回答
0

您过度使用 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]));
});

该代码中发生了各种疯狂的事情。请记住,您需要在将对象附加到另一个对象之前对其进行修改(除非您在事后有某种独特的方式来识别它们,即 ID)。

祝你好运。

于 2009-10-07T14:58:56.033 回答