删除除孩子以外的一切

时间:2013-02-20 09:20:43

标签: javascript jquery html parent children

<div class="parent">
   <span>sometext</span>
   plain text
   <input class="child">
</div>
<div class="parent">
   <span>sometext</span>
   plain text
   <input class="child">
</div>
<div class="parent">
   <span>sometext</span>
   plain text
   <input class="child">
</div>

如何安全删除除.parent以外的.child中的所有内容?

我正在使用此代码(其中items是一堆.childeach.child

items.each(function(){
    $(this).parent().children().each(function(){
       if ($(this).hasClass('child'))
          // do something
       else
          $(this).remove();
    });

    $(this).unwrap(); // remove parent, keep only .child
});

但它不处理纯文本。

4 个答案:

答案 0 :(得分:3)

你说过

  

.child内可以有多个.parent,我们只保留第一个items。所以如果有三个,第二个和第三个应该被删除。

那个

  

.child是一堆.child,每个都是items.parent('.parent').each(function() { var parent = $(this), child = parent.children('.child').first(); child.detach(); parent.empty().append(child); });

好的,那就是我要做的事情:

.child

这是做什么的:

  1. .parent元素集移动到.child元素集。结果集只有唯一的父母。

  2. 通过父母循环。

  3. 获取每个父级中的第一个 .parent并将其分离。

  4. 清空.child

  5. 重新附加.parent

  6. 最终结果是每个.child只有一个.child(并且没有其他子项,无论是否为{{1}})。

答案 1 :(得分:2)

这里有一个纯JS的解决方案:fiddle

因此,在循环中,您可以使用以下内容:

this.parentNode.innerHTML = this.outerHTML;

如果您必须保留附加的事件处理程序:

var _this = this.cloneNode(true),
    parent = this.parentNode;
parent.innerHTML = '';
parent.appendChild(_this);

答案 2 :(得分:1)

这样的事情会做到;

$('.parent').on('click', '.child', function(e) {
    var $this = $(this),
        $parent = $this.parent(),
        $children = $parent.find('.child'); // or: $this.siblings('.child');

    $parent
        .empty() // Empty the "parent" element
        .append($children); // Re-append all "child" element to "parent"
    $this.focus(); // Focus the (input) element
});

答案 3 :(得分:1)

以下是使用正则表达式的替代方法:

$('.parent').each(function() {
    $(this).html($(this).html().match("<input class=.child.>"));
});