重新附加使用jquery detach()删除的选项

时间:2014-11-13 14:29:54

标签: javascript jquery

我需要根据用户在不同下拉列表中选择的内容从下拉列表中删除选项。如果用户更改因果下拉列表,我需要在受影响的下拉列表中重新添加项目。我找到了jquery detach()选择器,我能够删除选项。有没有办法重新添加以前删除的选项?任何提示都表示赞赏。谢谢!

function RemoveATD() {
...

    if (reason == '10' || reason == '11')
    {
        $("#ddlOverride option").each(function () {
            if (!(parseInt($(this).val()) === 0 || parseInt($(this).val()) === 15077 || parseInt($(this).val()) === 20660)) {
                $(this).detach();
            }
        });
    }
    else {
        $("#ddlOverride option").each(function () {
            $("#ddlOverride").append($(this));
        });
}

2 个答案:

答案 0 :(得分:3)

.detach()返回已删除的元素,因此您只需将它们存储在数组中即可:

var arr = [];
if (reason == '10' || reason == '11')
    {
        $("#ddlOverride option").each(function () {
            if (!(parseInt($(this).val()) === 0 || parseInt($(this).val()) === 15077 || parseInt($(this).val()) === 20660)) {
                arr.push($(this).detach());
            }
        });
    }

然后读了它们:

for(el in arr){
    $('#ddlOverride').append(arr[el]);
}

工作fiddle

答案 1 :(得分:2)

如果您的意思是重新添加所有已删除的选项,只需将它们保存在不可见的位置。

e.g。一个隐藏的select喜欢:

<select id="hidden" style="display: none"></div>

更改您的代码,以便在分离时将它们附加到隐藏选择:

if (reason == '10' || reason == '11')
{
    $("#ddlOverride option").each(function () {
        if (!(parseInt($(this).val()) === 0 || parseInt($(this).val()) === 15077 || parseInt($(this).val()) === 20660)) {
            // Store it (e.g. in a hidden select)
            $('#hidden').append($(this).detach());
        }
    });
}
else {
    $("#ddlOverride option").each(function () {
        $("#ddlOverride").append($(this));
    });

注意:如果将其附加到别处(因为它在DOM中移动),则不需要分离,因此可以将其减少为:

  $('#hidden').append($(this));

要恢复它们,只需附加存储的子元素:

$("#ddlOverride").append($('#hidden').children());