我试图使用浏览器控制台来进行一些HTML代码操作。在控制台中,我输入
s = $('<div><span>ddd</span></div>');
s.remove('span');
请注意,jQuery对象s
不在DOM中,它只存在于控制台中。事实证明,span
并未从s
中删除。另一方面,如果<div><span>ddd</span></div>
位于HTML中,则肯定会删除span
。
这提出了一个令我困惑很久的问题。如果我理解正确,使用$()
,我可以将很多东西变成jQuery对象,即使它们实际上不在DOM中。但是这种jQuery对象与链接到某些DOM元素的jQuery对象有什么区别?在上面的代码中,为了实际删除span
并将输出作为<div></div>
,我是否必须将其写入DOM?
答案 0 :(得分:2)
这是因为你没有正确使用$.fn.remove
。删除子span
的正确方法是首先找到它:
s = $('<div><span>ddd</span></div>');
s.find('span').remove();
当您为remove
提供选择器时,jQuery会过滤此选择器提供的集合。但是,在您的情况下,没有任何内容可以过滤掉,因为div
显然不是span
。所以s.remove('span');
什么也没有删除。