0
<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
});

ただし、プレーンテキストは処理しません。

4

4 に答える 4

3

あなたは言った

.childの中に複数存在する可能性がありますが.parent、最初の 1 つだけを保持します。したがって、3 つある場合は、2 番目と 3 番目を削除する必要があります。

そしてそれ

itemsはのスタックで.childあり、それぞれは.child

さて、これは私がすることです:

items.parent('.parent').each(function() {
    var parent = $(this),
        child  = parent.children('.child').first();
    child.detach();
    parent.empty().append(child);
});

それは何をしますか:

  1. .child要素のセットから要素のセットに移動し.parentます。結果のセットには、一意の親のみが含まれます。

  2. 親をループします。

  3. 各親の最初 のものを取得し、.child切り離します。

  4. を空にし.parentます。

  5. を再度取り付けます.child

最終結果は、それぞれ.parentが 1 つだけを持つことです.child(そして、他の子はあり.childません)。

于 2013-02-20T09:24:34.563 に答える
2

ここでは、純粋な JS を使用したソリューションが得られます: fiddle

したがって、ループ内で次を使用できます。

this.parentNode.innerHTML = this.outerHTML;

アタッチされたイベント ハンドラーを保持する必要がある場合:

var _this = this.cloneNode(true),
    parent = this.parentNode;
parent.innerHTML = '';
parent.appendChild(_this);
于 2013-02-20T09:34:11.950 に答える
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
});
于 2013-02-20T09:25:06.003 に答える
1

正規表現を使用した代替方法は次のとおりです。

$('.parent').each(function() {
    $(this).html($(this).html().match("<input class=.child.>"));
});
于 2013-02-20T09:37:23.667 に答える