if 子句与 img 生成有关的问题

发布于 2024-11-01 10:23:55 字数 903 浏览 3 评论 0原文

脚本如下;

$("#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());
        }
    }
});

我双击链接标签来创建一个 img 元素,该元素使用图像 src 的链接的 href,并根据链接元素所具有的类将此 img 放置在特定的位置。 img 元素创建部分工作完美。但是,我现在尝试根据链接标签的类别对各种图像进行“排序”。这就是我遇到麻烦的地方。对我来说,它应该如何进行似乎是显而易见的,但它不起作用。

我想,它应该简单地是:当我双击一个链接时,如果这个(链接)有类__,请在此处创建一个img。如果是 diff 类,则在此处创建一个 img。请注意,链接在任何时候都不会被删除。

.parent/insertafter/parent 部分是必需的,因为它是确定层次结构内放置方式的一部分。 Spot_A/B是起点,这是排序的关键。

Script is as follows;

$("#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());
        }
    }
});

I double click a link tag to create an img element that uses the href of the link for the src of the image, and places this img somewhere specific, based on the class the link element had. The img element creation part works perfectly. However, i'm now trying to 'sort' the various imgs based on what class the link tag had. This is where i'm having trouble. To me, it seems dead obvious how it should go, but it fails to work.

I figured, it should simply be: When i double click a link, if this (the link) has class __, create an img HERE. If a diff class, then create an img HERE. Note that the links aren't being deleted at any point.

The .parent/insertafter/parent part is necessary because its a part of how the placement within the hierarchy is determined. Spot_A/B is the starting point, and this is the key for the sorting.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

a√萤火虫的光℡ 2024-11-08 10:23:55

.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'
  • 与单引号和双引号保持一致
  • 保持DRY
  • 这更多的是个人喜好的问题,但是一个简单的 if-else 情况可以用两个集合写得更简洁三元运算符
  • 根据 jQuery 文档,可以包含其他元素的标签应与结束标记(当使用 $() 创建新元素时)
  • 清理元素创建调用

.hasClass() takes the name of a class, not a class selector. Remove the periods.

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

Giving this the full cleanup treatment:

$('#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'})));
    }
});
  • Don't repeatedly wrap this, store $(this) in a local variable
  • There is no need to check for event.type === 'dblclick'
  • Be consistent with single vs double quotes
  • Stay DRY
  • This is more a matter of personal preference, but a simple if-else case can be written more tersely with two sets of ternary operators
  • As per the jQuery docs, tags that can contain other elements should be paired with a closing tag (when using $() to create new elements)
  • Clean up the element creation calls
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文