2015-04-29 239 views
0

我在我的程序中使用jquery token输入,并根据选择列表更改我需要传递额外的参数到搜索功能。我可以通过下面的代码来完成。使用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元素。

+0

所以你要删除的UL当空,李呢? – ekuusela

+0

为什么要在创建具有相同标识的新标识时将其分离?为什么不按照要求更改内容/代码? –

+0

亲爱的ekuusela,是的,我需要删除ul当空和李以及 – Sachu

回答

1

尝试:

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

DEMO

+0

它也在工作,但我使用了上面的一个。 – Sachu

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

+0

分离和删除之间的差异是什么? – Sachu

+0

我链接到他们两个的文档。几乎在分离文档的顶部解释了差异。 – ekuusela

+0

很棒..它的工作很好..我改变了.detached to .remove,因为我不想重复使用它。感谢您的帮助 – Sachu

1

使用jQuery的unwrap()

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