使用jquery删除元素

时间:2015-04-29 05:32:13

标签: jquery asp.net-mvc html5 asp.net-mvc-3

我在我的程序中使用jquery令牌输入,并根据选择列表更改我需要将额外的参数传递给搜索功能。我可以通过以下代码来完成。

$("#service").on('change', '.act_type', function () {  
qq = $(this).val();
var id = $(this).attr('id').split('-');
$("#token-input-code-" + id[1]).detach();
$("#code-"+id[1]).tokenInput("../Preapproval/Searchactivitycode?queryParam=q" + "&type=" + qq,{
theme: 'facebook',
preventDuplicates: true,
searchingText: 'Searching...',
tokenLimit: 1,
hintText: 'Activity code',
 });

这些行是动态创建的。当完成选择列表的更改时,我将分离具有令牌输入的当前文本框。否则,将通过保留旧文本框来创建新文本框。现在它正在分离旧的并创建一个具有相同id和tokeninput的新的。搜索也成功。但我面临一个问题。

令牌输入$("#token-input-code-" + id[1])位于<ul><li></li></ul下,此li和ul未被删除,因此每次我在选择列表中进行更改时,行顶部会显示一条小行。 我怎样才能删除ul和li。它没有id只有一个类,同一个类也用于表单中的另一个ul元素。

3 个答案:

答案 0 :(得分:1)

使用jquery的unwrap()

    var el = $('div[id^="token-input-code"]');
        el.parent('li').unwrap();
        el.parent('ul').unwrap();

答案 1 :(得分:1)

尝试:

$('ul:has(li:empty)').filter(function() { 
    return $(this).children().length === 1; 
}).remove();

DEMO

答案 2 :(得分:0)

您可以使用以下函数分离父元素:

function detachInput(id) {
    var li = $('#' + id).closest('li');
    if (li.siblings().length === 0) {
        li.closest('ul').detach();
    } else {
        li.detach();
    }
}

这假定ul元素可以包含多个li元素,而您只想在ul为空时将其删除。

像这样调用它:

detachInput("token-input-code-" + id[1]);

您应该考虑是否真的想要detach或实际remove