在.detach()之后恢复jQuery对象

时间:2014-12-10 19:06:41

标签: jquery detach

我在这个圈子里走了一圈。我有一份房子清单。我想删除不符合所选标准的房屋。每个房子都包含在li标签中。

我以为我可以在页面上创建所有li标签的jQuery对象,对其进行操作,从页面中删除当前的li标签并附加新列表。

但是我被困了......

<ul id="items">
<li id="p123">Property 1</li>
<li id="p456">Property 2</li>
<li id="p789">Property 3</li>
</ul>


var $j_object = $("li");
var clone = $j_object.clone();

$('li').detach();

itemToShow = '#p456';

// three options to restore list item
$(itemToShow).appendTo($("#items"));

$($j_object[itemToShow]).appendTo($("#items"));

$($clone[itemToShow]).appendTo($("#items"));

小提琴:http://jsfiddle.net/cc01euf2/

2 个答案:

答案 0 :(得分:1)

如果它们符合或不符合您的条件,您可能需要考虑隐藏/显示它们,而不是从DOM中分离元素。

$('#items li').each(function() {
    if($(this).html().indexOf('Property 2') > -1) { 
        $(this).hide();
    } else {
        $(this).show();
    }
});

示例:http://jsfiddle.net/dfdq49j4/2/

答案 1 :(得分:1)

因此,您有一个集合的jquery对象:

var $j_object = $("li");

基本上,这是一个类似的数组:

['li#p123', 'li#p456', 'li#p789'] //made up of elements, not strings obviously

要从此数组中选择单个元素,您必须使用filter。这与find的作用相同,但它仅搜索顶层。而find搜索集合中每个元素的后代。

所以,

$j_object.filter('#p456').appendTo('#items');

获取#p456元素并将其附加到#items

另请注意,即使您追加$j_object#p456仍会引用{{1}}。

添加和删除演示:http://jsfiddle.net/2Lyudrsj/1/