【问题标题】:jQuery slider: clone and delete element based on slider valuejQuery滑块:根据滑块值克隆和删除元素
【发布时间】:2012-06-11 21:18:52
【问题描述】:

正如标题所说...

我正在尝试根据滑块值找到复制/克隆 div 的最佳方法;相反,当滑块值减小时,我也尝试删除添加的元素。实际上,滑块值应始终反映所显示的克隆元素的数量(彼此堆叠)。最初,将显示 0 个元素。

例如

要克隆的元素:

    <div class="test" style="display: none">test</div>

滑块: http://jqueryui.com/demos/slider/#slider-vertical

初始化:

    max: 20,
    value: 0,

提前致谢!

【问题讨论】:

  • 老实说,我是 jQuery 新手,我还没有决定最好的开始路径...我能想到的最好的方法是使用像这样的函数 link但我真正挂断的地方是移除时。我想提及我想在幻灯片事件中执行此功能也会有所帮助。

标签: jquery slider clone


【解决方案1】:

您可以使用滑块的停止事件来计算您需要添加或删除多少个 div。我只是添加和减去 div 元素,但您也可以轻松克隆。

演示:http://jsfiddle.net/lucuma/ggC8s/

$(function() {
    $("#slider-vertical").slider({
        orientation: "vertical",
        range: "min",
        min: 0,
        max: 100,
        value: 0,
        stop: function(event, ui) {
            $("#amount").val(ui.value);
            var diff = ui.value - $('#content div').length;
            if (ui.value == 0) {
                $('#content div').remove();
            } else if (diff < 0) {
                $('#content div:gt(' + ($('#content div').length + diff - 1) + ')').remove();
            } else {
                var i = diff;
                while (i--) {
                    $('#content').append('<div>div</div>');
                }
            }
        },
        slide: function(event, ui) {
            $("#amount").val(ui.value);
        }
    });

});​

作为替代方案,您可以删除所有 div 并重新生成它们,而不是计算增量。

演示:http://jsfiddle.net/lucuma/ggC8s/3/

$(function() {
    $("#slider-vertical").slider({
        orientation: "vertical",
        range: "min",
        min: 0,
        max: 100,
        value: 0,
        stop: function(event, ui) {

            var diff = ui.value;
            $('#content div').remove();
            while (diff--) {
               $('#content').append('<div>div</div>');
            }
        },
        slide: function(event, ui) {
            $("#amount").val(ui.value);
        }
    });

});​

【讨论】:

  • 我认为.clone() 在那里丢失了。此外,备用 jsFfiddle 可能会丢失任何附加的事件。但这仍然是可靠方法的 +1。
  • 这些太棒了,看起来两者都适合我的情况。有没有一种方法与另一种方法的争论?第二个看起来有点简单,但看起来可能会欺骗新手。最初,我不确定要使用的方法; clone 似乎是正确的选择,但我很高兴看到解决问题的替代方法。非常感谢您!
  • @arttronics 你是对的,我没有直接使用克隆,但这很简单。这是一个带有克隆的 jsfiddle,只是为了把它拿出来:jsfiddle.net/lucuma/ggC8s/4 唯一的区别是我'已经使用 css 来隐藏它而不是内联 css,这样我在克隆它时就不必更改 css。
  • @Dennis 我认为在你的情况下更好的应该是对你来说更简单、更容易理解的那个。话虽这么说,你试图用它做什么也很重要。第二个示例删除整个列表并重新创建它,这就是它更简单但效率可能较低的原因。无论哪种方式,选择一个,看看效果如何。
  • @Dennis,如果答案有用并使其成为公认的答案,请通过 Upvoting 表示感谢。 @lucuma,我提到 .clone(); 只是因为它是 SO 问题的一部分,除了琐事。感谢您的示例,因为它也对我有帮助! +1+1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多