jQuery为空,但排除某个元素

jQuery为空,但排除某个元素,jquery,jquery-selectors,selector,removechild,Jquery,Jquery Selectors,Selector,Removechild,我尝试empty()一个div,但排除了一个特定的选择器 到目前为止: HTML: …我需要被移除。。。 我不确定是否有错误,但我能看到的实现这一点的最简单方法是: var el = $('.close'); $('.modal').empty().append(el); 稍微好一点的方法(基于多个.close元素的错误假设): 使用jQueryeach()和普通JavaScript函数的组合: function fratricide(el) { while (el.previous

我尝试
empty()
一个div,但排除了一个特定的选择器

到目前为止:

HTML:


…我需要被移除。。。

我不确定是否有错误,但我能看到的实现这一点的最简单方法是:

var el = $('.close');
$('.modal').empty().append(el);

稍微好一点的方法(基于多个
.close
元素的错误假设):

使用jQuery
each()
和普通JavaScript函数的组合:

function fratricide(el) {
  while (el.previousSibling) {
    el.parentNode.removeChild(el.previousSibling);
  }
  while (el.nextSibling) {
    el.parentNode.removeChild(el.nextSibling);
  }
}

$('.close').each(

function() {
  fratricide(this);
});

还有一个。毫无疑问,使用纯JavaScript可以显著加快速度,尽管我认为它读起来很难看(尽管我不确定它实际上会变得多漂亮)

有趣的是(对我来说,无论如何,现在我已经更新了之前链接的JS Perf),使用一个变量来存储对
el.parentNode的引用,差别可以忽略不计,可能是因为尽管保存了对元素/节点的引用,但仍必须访问DOM才能找到
el.previousSibling
节点?

您可以尝试以下方法:


jQuery与textnodes不匹配。示例中的文本不被视为包含在.modal中的节点;因此,不能通过“选择除某个其他节点外的所有节点”来删除它。将文本包装成一个简单的

可以这样做:


嗯,不是很优雅吧?!不,这就是我现在正在探索的…=)您的实际页面是否有多个
.close
元素?(我想是的……)谢谢尽管如此,T仍然不太合适…=)当然可以,但思想才是最重要的;)嗯,不是很优雅吧?!那么你希望它是怎样的呢?一行多点。请给我们看一个HTML示例。已经完成了,请看…您的HTML应该在问题本身中,否则当JS Fiddle倒下时(并且它半频繁地倒下),这个问题将变得毫无用处,作为其他有相同或类似问题的人的资源。@DavidThomas Ok,我不得不接受!感谢您的编辑:-*@ErickAstoOblitas我真的不确定链接与问题的关系如何?@yckart如果您的“…我有需要删除…”是一组定义的元素,如输入、span等,您可以使用
$('input',$('.modal')).remove()
$('span',$('.modal')).remove()
var el = $('.close');
$('.modal').empty().append(el);
$('.modal').each(
  function(){
    var that = $(this),
        el = that.find('.close');
    that.empty().append(el)
  });
function fratricide(el) {
  while (el.previousSibling) {
    el.parentNode.removeChild(el.previousSibling);
  }
  while (el.nextSibling) {
    el.parentNode.removeChild(el.nextSibling);
  }
}

$('.close').each(

function() {
  fratricide(this);
});
var div = $('.modal').clone().find('a');
$('.modal').empty().html(div);
$(".modal").contents().filter(function(){
    return !$(this).is('.close');
}).remove();