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()功能。如果您只交付一个元素,这可能会有所帮助。将您的 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 回答