jQuery:有没有办法让它更短更优雅?

时间:2009-05-06 02:57:27

标签: javascript jquery

我的代码如下:

<div id="wrapper">
        <img id="first"  class="images" src="img/nike.jpg" />
        <img  id ="second" class = "images" src="img/golden.jpg" />
        <img id = "third" class ="images" src ="img/a.jpg" />
        <img id = "fourth" class="images" src="img/God__s_Canvas_by_Delacorr.jpg" />
    </div>

我想动态地用<a name = n>包装每个img。所以我的解决方案是这样做:

$(".images").wrap('<a></a>')
$("#wrapper a").each(function(n) {
            $(this).attr('name', n);
        })

是否可以将2个语句链接成1个语句?我知道jQuery特别优雅链接,所以我认为这绝对是可能的。我只是不知道该怎么做。

3 个答案:

答案 0 :(得分:4)

这不完全相同,因为它不会在#wrapper之外包装.images,但它已经接近了。它在循环中创建并立即应用属性。

$('#wrapper img').each(function(n) { 
    $(this).wrap($('<a></a>').attr('name', n));
}

答案 1 :(得分:3)

这可能有用......

$(".images").wrap('<a></a>').parent().each(function(n) {$(this).attr('name', n);});

答案 2 :(得分:0)

我认为你不能,因为你引用了两个独立的对象集合。 $()将返回匹配项的数组。在第一次实现的情况下,您将使用一组“图像”拉动每个图像,并使用锚标记将它们包装起来。在第二个实现中,您将拉出“wrapper”div中的所有锚标记元素,并应用name属性。这是两个截然不同的集合,第二个集合甚至在你完成第一个陈述之后才可用。

现在,丹的实施可能会成功。不是你想要的链条,而是金钱似乎。