2009-05-06 130 views
2

我有一个看起来像这样的代码: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> 

我想每个包裹与IMG动态<a name = n>。所以我的解决方案是这样做的:

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

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

+0

Man ...我喜欢jQuery的链接功能。很难说哪个最好,因为你的解决方案以及所有的答案都是完全合法的,是很好的解决方案。我会给丹优雅奖,但很难说目前的三种解决方案中哪一种最好。优雅并不总是意味着它表现更好。我想说的是,Dan会执行最好的两个,因为完成任务需要进行最少量的循环。好东西伙计。 ;-) – KyleFarris 2009-05-06 03:13:16

回答

4

这不完全相同,因为它不包裹#wrapper以外的.images,但它很接近。它在循环中创建并立即应用该属性。

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

谢谢!您的解决方案效果很好。 – 2009-05-06 03:12:49

+0

我不知道这是可能的。 jQuery的岩石! +1 – 2009-05-06 03:36:01

3

这可能工作...

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

我不认为你可以,因为你引用对象的两个单独集合。 $()将返回一个匹配项的数组。在你第一次实现的情况下,你需要用一个'image'类来拉每个图像,并用anchor标签包装它们。通过第二次实现,您将拉动'wrapper'div中的所有锚标记元素,并应用name属性。这是两个截然不同的集合,第二个集合直到完成第一个陈述后才可用。

现在,丹的执行上面可能会伎俩。不是你寻找的链子,而是钱上。

相关问题