2

jQuery を使用してテキスト領域に追加された特定の要素のみを保持しようとしています。MutationObserver を使用して、div に追加された新しいアイテムを見つけ、それをフォームにコピーしています。

// passes content to the string, new items are also found
// and added using the MutationObserver
//
var stringContent = $("#OriginalOutput").html() 

ただし、この場合、html で見つかったすべての新しい「li」を取得しようとしています。

たとえば、次のような方法をいくつか試しました。

var stringContent = $("#OriginalOutput").clone().find('.container')
  .insertAfter().end().html();

これは機能しますが、内部の最初の 'li' 要素しか得られません。また、insertAfter を別のものに置き換える他の方法も試しましたが、同じ結果が得られましたが、見つかったすべての 'li' 要素が得られませんでした。

ul 要素は既に別の場所で呼び出されており、見つかったすべての 'li' 要素を文字列に渡すだけで済みます。このようにして、ここで使用できます。

//edited from #OriginalOutput to #output
$("#output").val("<ul class=\"mylist\">\n" + stringContent + "</ul>");

私が試した別の方法は、追加されたすべての「li」を保持するためだけに必要のない要素を削除することでしたが、私が抱えていた問題は、各クラスを削除する方法がわからなかったことと、親の div を削除した場合すべての要素を保持すると、「li」要素を含むその中のすべてを取得するだけなので、それはできないと確信しています。最終出力でstr_replaceを使用してPHPを使用して取得しようとしましたが、削除する必要があるほとんどの要素が一意のIDを出力するため、特定の要素のみを取得できました。

4

2 に答える 2

0

これを試してみてください:

var stringContent = $("#OriginalOutput .container").clone().find(':not(li)')
    .remove().end().html();
于 2013-03-11T19:13:43.397 に答える
0

関数を使用し.each()ます。配信される要素が1つだけの場合は、これが役立つ場合があります。jQueryを次のように変更します。

var stringContent = '';
$("#OriginalOutput").clone().find('li').each(function(){
  var t = $(this);
  stringContent += t[0].outerHTML;
}

アップデート

アスカーのコメントによると:

私の推測では、あなたの問題はアイテムを引っ張ることではなく、アイテムを入れることであると思います。私はあなたがそれらをこれに挿入する方法を変更します:

$("#OriginalOutput").clone().find('li').each(function(){
  var t = $(this);
  $("#OriginalOutput").append(t);
});

val()元の回答でなぜあなたが選んだのかわかりませんが、それ$('#OriginalOutput')は隠された要素だと思いました。これが非表示の要素である場合は、次のように、関数で最初からクローンを作成することをお勧めします。

var myCloneElement = $(document.createElement('ul'));
myCloneElement = $('#myTargetList').clone();
$("#OriginalOutput").clone().find('li').each(function(){
  var t = $(this);
  myCloneElement.append(t);
});
$('#myTargetList').html(myCloneElement.html());
于 2013-03-11T19:13:58.143 に答える