【问题标题】:See if child already exists in different tab查看孩子是否已经存在于不同的选项卡中
【发布时间】:2011-10-18 21:10:15
【问题描述】:

我有两个标签:

  • 在第一个选项卡中,我有一个固定的项目列表。每个项目都可以添加到另一个选项卡。
  • 第二个选项卡包含来自第一个选项卡的自定义项目列表。
  • 第二个选项卡应该只包含具有唯一 ID 的项目
  • 不能多次将同一项目从 tab1 添加到 tab2。

添加和删除机制有效,但检查是否已将项目添加到 tab2 的检查无效。目前我只在该项目是否存在时发出警报。

如果在另一个方向进行检查,检查 tab1 中是否存在项目似乎工作正常,这对我来说似乎很奇怪。

有人可以对我的代码提出改进建议吗?

编辑: 问题是完成的检查总是返回“否”。它需要改进,我没有想法。

HTML:

<div class="demo">
    <div id="tabs">
        <ul>
            <li><a href="#tabs-1">Bands</a></li>
            <li><a href="#tabs-2">My bands</a></li>
        </ul>
        <div id="tabs-1">
            <ul id="sortable1" class="bandList">

                <li id="6" class="band">
                    <div class="text">Band 1</div>
                    <div class="actions">
                        <a href="#" class="add">Add</a>
                        <a href="#" class="remove">Remove</a>
                    </div>
                </li>

            </ul>
        </div>
        <div id="tabs-2">
            <ul id="sortable2" class="bandList">

                <li id="9" class="band">
                    <div class="text">Band 2</div>
                    <div class="actions">
                        <a href="#" class="add">Add</a>
                        <a href="#" class="remove">Remove</a>
                    </div>
                </li>

            </ul>
        </div>
    </div>
</div>

CSS:

.band .actions a.add{
    background:url("../img/edit.png") no-repeat center center;
}

.band .actions a.remove{
    background:url("../img/delete.png") no-repeat center center;
}

JQuery:

// Listening for a click on an add button
$('.band a.add').live('click',function(){
    var cur_id = $(this).parent().parent().attr("id");

    var tmp = ($('#sortable2').has('#' + cur_id).length ? "Yes" : "No")
    alert(tmp);

    $('#sortable2').append($('#'+cur_id).clone());
});


// Listening for a click on a delete button (original)
$('.band a.remove').live('click',function(){
    var cur_id = $(this).parent().parent().attr("id");

    $('#sortable2 > li').remove('#' + cur_id);
});

【问题讨论】:

    标签: jquery html


    【解决方案1】:

    这一行:

    ($('#sortable2').has('#' + cur_id).length ? "Yes" : "No");
    

    总是返回"No"。如果您返回length,它将始终返回Yes。我无法让它与has 一起工作,但它与children 一起返回了正确的结果(我认为)。不过它只会移动一级。

    【讨论】:

    • 谢谢,将 .has() 更改为 .children() 解决了问题,一切都按我的预期运行。我曾尝试过 .children() 但它可能有所不同。
    【解决方案2】:
    if (tmp == "No") { $('#sortable2').append($('#'+cur_id).clone()) }
    

    【讨论】:

    • 感谢您的建议,但问题是测试总是返回“No”,这意味着总是进行添加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2017-04-27
    相关资源
    最近更新 更多