【问题标题】:Jquery Optimisation of Draggable and ResizablejQuery 对 Draggable 和 Resizable 的优化
【发布时间】:2012-01-17 18:33:36
【问题描述】:

我正在寻求一些关于 jquery 的帮助。有人能告诉我优化在许多不同但名称相似的元素上使用 .draggable 和 .sizable 的最佳方法吗

例如

    $( "#elem1" ).draggable({

        many lines of code
    });

    $( "#elem2" ).draggable({

        many lines of code
    });

    $( "#elem3" ).draggable({

        many lines of code
    });

    $( "#elem4" ).draggable({

        many lines of code
    });

    ...

    $( "#elem1" ).resizable({

        many lines of code
    });

    $( "#elem2" ).resizable({

        many lines of code
    });

    $( "#elem3" ).resizable({

        many lines of code
    });

    $( "#elem4" ).resizable({

        many lines of code
    });

    ...

我确信有一种方法可以简单地将数字 1、2、3 等传递给一些多用途代码,但我不知道该怎么做,因为据我所知,你必须这样做单独的元素。我相信有人会帮我解决这个问题。

非常感谢。

【问题讨论】:

  • 你的many lines of code的代码都是一样的吗?
  • 或多或少。通过将 Id 包含为 1、2、3 并将其包含到元素名称中,它们可以变得相似......
  • 你能提供一个链接吗?我猜 html 和 JS 都可以大大简化。

标签: jquery jquery-ui-draggable jquery-ui-resizable


【解决方案1】:

如果您的代码仅与引用特定元素 ID 的字符串不同,您可以像这样减少代码重复:

$("#elem1, #elem2, #elem3, #elem4").resizable({
  var id = $(this).attr('id'); //now you can use the ID without hard coding the string.
});

如果所有可调整大小的元素共享一个公共类,则可以进一步清理它:

$(".resizable-element").resizable({
  var id = $(this).attr('id'); //now you can use the ID without hard coding the string.
});

如果您需要专门访问整数后缀,您可以将该值存储为元素本身的data 属性:

<div id="elem1" data-idSuffix="1" class="resizable-element"></div>

使用上面的标记让我们的示例更进一步:

$(".resizable-element").resizable({
   var id = $(this).attr('id');
   var idSuffix = $(this).data('idSuffix');
});

【讨论】:

  • 感谢 Nathan,这正是我需要的信息,因为我是 jquery 工作方式的新手。我相信我现在可以解决了。
  • 内森,我正在使用上面的第一个选项。它适用于拖动。它也适用于一个调整大小的元素,但由于我需要为每个元素使用不同的句柄,因此第二个、第三个等不起作用,因为只定义了第一个元素的句柄。您知道如何为每个元素(在一段代码中)设置不同的句柄吗?我已经尝试过“创建:”事件,但没有任何乐趣。
  • 在您的问题中发布您的 HTML 和 JS,以便我们更好地为您提供帮助。使用“真实”标记将更容易解决您的拖动句柄问题。
  • 内森,感谢您的回复。我设法通过重写 html 以在整个过程中使用相同的句柄来解决这个问题。感谢您抽出宝贵时间提供帮助。
【解决方案2】:

根据您的标记,您也许可以使用Attribute Starts With selector

$("[id^=elem]").draggable({
    // your draggable options...
}).resizable({
    // your resizable options...
});

【讨论】:

    【解决方案3】:
    1. 为所有“elemX”添加一个类,以便您轻松定位它们。
    2. 使用 id 获取他们的“号码”
    3. 用那个号码做任何你需要的事情
    4. 利润

    如果您的选项确实取决于被实例化的元素,那么您将需要独立激活每个选项,但这并不意味着您不能稍微减少代码。

    $('.yourclass').each(function(){
        var $elem = $(this);
        var num = parseInt( $elem.attr('id').slice(4), 10 );
        $elem.draggable({
    
            option : "depends on " + num    
    
        }).resizable({
    
            option : "depends on " + num    
    
        });
    });
    

    【讨论】:

    • 感谢您的回复 Sinetheta。我会看看这个,看看我是否可以安排我的代码来做到这一点。
    猜你喜欢
    • 2011-07-28
    • 2011-07-16
    • 1970-01-01
    • 2011-07-12
    • 2013-04-18
    • 2011-09-14
    • 1970-01-01
    • 2021-07-20
    • 2023-03-23
    相关资源
    最近更新 更多