2011-04-15 52 views
0

脚本如下;如果条款问题与img代

$("#Results a").live('dblclick', function(event){ 
    var src = $(this).attr("href"); 
    if (event.type === 'dblclick') { 
     if ($(this).hasClass(".A")) { 
      $('<img />', {'src': src,'class': 'Box'}).wrap('<div class="Packet" />').parent().insertAfter($('.Spot_A').parent()); 
     } else if ($(this).hasClass(".B")) { 
      $('<img />', {'src': src,'class': 'Box'}).wrap('<div class="Packet" />').parent().insertAfter($('.Spot_B').parent()); 
     } 
    } 
}); 

我双击链接标签来创建一个使用链接的href为图像的src的img元素,并把这个IMG放在特定的,基于类的链接元素了。 img元素创建部分完美工作。但是,我现在试图根据链接标签所属的类来对各种imgs进行“排序”。这是我遇到麻烦的地方。对我来说,它应该如何去看起来很明显,但它没有奏效。

我想,应该只是:当我双击一个链接,如果这个(链接)有_ _,创建一个img HERE。如果是差异类,则创建一个img HERE。请注意,链接在任何时候都不会被删除。

.parent/insertafter/parent部件是必需的,因为它是层次结构中部署的一部分。 Spot_A/B是起点,这是排序的关键。

+1

为什么你'event.type'检查?!如果'Spot_A/B'是出发点,为什么你要在它们上执行'parent()'? – Khez 2011-04-15 03:03:10

回答

4

.hasClass()取得类的名称,而不是类选择器。删除句点。

if ($(this).hasClass("A")) { 
    // stuff 
} else if ($(this).hasClass("B")) { 
    // other stuff 
} 

这给予充分清理处理:在一个局部变量

  • $('#Results a').live('dblclick', function(event) { 
        var $this = $(this), 
         src = $this.attr('href'), 
         target = $this.hasClass('A') ? '.Spot_A' 
           : $this.hasClass('B') ? '.Spot_B' 
           : null; 
    
        if (target) { 
         $(target).parent().after($('<div class="Packet"></div>').append($('<img />', {'src': src, 'class': 'Box'}))); 
        } 
    }); 
    
    • 请勿反复包裹this,商店$(this)没有必要检查event.type === 'dblclick'
    • 符合单双引号
    • 保持干爽
    • 这是更多的个人喜好的问题,但一个简单的if-else情况下,可以用两套三元运营商
    • the jQuery docs,标签可以包含其他元素的更简洁地写应该关闭配对标签(使用$()创建新元素时)
    • 清理元素创建调用
  • +0

    +1,用于列表,代码和捕获。我唯一的遗憾是我只有一个+1来给这个答案。 – Khez 2011-04-15 05:37:23

    +0

    哇!谢谢!我真的应该参加一个课程或其他课程,我只是通过这个论坛和其他网络来源学习。如果我想要检查目标位置是否有任何重复的href/src,该怎么办;如果是这样,无效?再次感谢,完美的作品。 – 2011-04-15 13:42:36