<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
是一堆.child
而each
是.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
});
但它不处理纯文本。
答案 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
这是做什么的:
从.parent
元素集移动到.child
元素集。结果集只有唯一的父母。
通过父母循环。
获取每个父级中的第一个 .parent
并将其分离。
清空.child
。
重新附加.parent
。
最终结果是每个.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.>"));
});