【问题标题】:Move containing elements up and down with jquery使用jquery上下移动包含元素
【发布时间】:2013-03-07 07:44:49
【问题描述】:

感谢您提供的任何帮助!目前,我使用 ui-sortable 代码来允许用户按顺序上下移动项目。现在,我想为这些项目中的每一个提供一组“向上”和“向下”按钮,允许用户通过单击来上下移动项目。我试过修改这些帖子,但我似乎遗漏了一些明显的东西......

jQuery Sortable Move UP/DOWN Button move up/down in jquery

我认为我没有将 jquery 应用于正确的元素。我的 jsfiddle 在这里:http://jsfiddle.net/kevindp78/vexw5/2/,代码如下。

HTML

<div id="box" class="ui-sortable" style="display: block;"> 
<div class="leg">
    <a class="image">IMG1</a>
    <div class="details">
        <h3><a href="/details">Info</a></h3>
        <span class="moreinfo">MoreInfo</span>
    </div>
    <div class="clear"></div>
    <div class="up-down">
        <p>Change Order</p>
        <div class="up">
            <input type="button" value="Up" class="up-button"/>
        </div>
        <div class="down">
            <input type="button" value="down" class="down-button"/>
        </div>
    </div>
    <div class="morestuff">
        Stuff1
    </div>
</div>
<div class="leg">
    <a class="image">IMG2</a>
    <div class="details">
        <h3><a href="/details">Info</a></h3>
        <span class="moreinfo">MoreInfo</span>
    </div>
    <div class="clear"></div>
    <div class="up-down">
        <p>Change Order</p>
        <div class="up">
            <input type="button" value="Up" class="up-button"/>
        </div>
        <div class="down">
            <input type="button" value="down" class="down-button"/>
        </div>
    </div>
    <div class="morestuff">
        Stuff2
    </div>
</div>
<div class="leg">
    <a class="image">IMG3</a>
    <div class="details">
        <h3><a href="/details">Info</a></h3>
        <span class="moreinfo">MoreInfo</span>
    </div>
    <div class="clear"></div>
    <div class="up-down">
        <p>Change Order</p>
        <div class="up">
            <input type="button" value="Up" class="up-button"/>
        </div>
        <div class="down">
            <input type="button" value="down" class="down-button"/>
        </div>
    </div>
    <div class="morestuff">
        Stuff3
    </div>

</div>

JS

$('up-button').click(function(){
$(this).parent('.leg').insertBefore.previous('.leg')
});

$('.down-button').click(function(){
$(this).parent('.leg').insertAfter.next('.leg')
});

【问题讨论】:

  • 缺少分号是错别字吧?

标签: jquery jquery-ui-sortable


【解决方案1】:

您的代码中有几个问题需要解决,所以让我们按顺序处理。

首先是$('up-button'),它缺少.,所以它不会选择按钮。

接下来你使用parent() 方法,它只会上一层,改用parents('.leg')

insertBefore() 是一种方法,它接受一个目标,将您选择的内容放置在哪里。

previous() 不是函数,而是prev(),它不需要参数,因为它只是选择了前一个元素。

如果你将所有这些修复结合起来,你会得到这样的结果

$('.up-button').click(function(){
  $(this).parents('.leg').insertBefore($(this).parents('.leg').prev());
});

$('.down-button').click(function(){
  $(this).parents('.leg').insertAfter($(this).parents('.leg').next());
});

正如这个编辑过的小提琴http://jsfiddle.net/vexw5/6/所展示的那样

【讨论】:

  • 虽然这不是第一个响应,但它是最翔实和详细的,因此我可以了解哪里出了问题(还有很多东西要学!)谢谢@BeardFist。
  • 完美运行。感谢您提供优雅简洁的解决方案! +1
【解决方案2】:

您可以尝试用以下内容替换您的 JS:

$(".down").click(function () {
    var $parent = $(this).parents(".leg");
    $parent.insertAfter($parent.next()); 
});

$(".up").click(function () {
    var $parent = $(this).parents(".leg");
    $parent.insertBefore($parent.prev()); 
});

http://jsfiddle.net/vexw5/7/

这只是基础。没有动画或任何东西。

【讨论】:

  • 我给@BeardFist 提供了正确答案,因为它提供了关于我所犯错误的更多细节。我也非常感谢您的解决方案;感谢您花时间帮助我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
相关资源
最近更新 更多