1

我看过 before()、append() 和 wrap()。没有一个是我所需要的。

我正在尝试做的伪解释:

我正在处理<div>他们班级选择的 s 的“列表”。如果 .text() 从一个“行”更改为我要插入的下一个(例如)<div class="wrapper">,当 .text() 再次更改时,我想关闭前一个包装器,然后开始一个新的包装器(</div><div class="wrapper">)等等.

最后,像“行”(基于 .text())将被包装在一个给定的<div class="wrapper">.

当我尝试使用我提到的任何方法时,它们都以某种方式强制结束标记。我想自己添加 div 和结束标签。似乎是一个非常简单的需求,但我似乎找不到可行的解决方案。

4

4 回答 4

5

你不能。

即使您不关闭标签,以某种方式注入错误的 HTML,浏览器也会尝试为您关闭它。只需在需要时向标签的内容添加更多内容。

于 2012-08-06T19:02:24.990 回答
3

简单的答案是,当您使用 DOM 时,您不能插入损坏的标签。但是,你可以改变你的心态。与其尝试添加<div>,然后添加</div><div>这么多元素,不如将其切换:

var $d = $('<div>').appendTo('#container');
$d.append(/*match*/);
$d.append(/*match*/);
$d.append(/*match*/);
$d = $('<div>').appendTo('#container');
$d.append(/*match*/);
$d.append(/*match*/);
$d.append(/*match*/);

等等。基本上,改变你的思维过程,将元素移动到 中,而不是用标记<div>包装元素。<div>

您还可以保持运行记录,然后根据文本更改重置您的列表(如您所述)。例如

var matches = [],
    $d = $('div');
$d.each(function(){
    var $t = $(this);
    if(matches.length > 0 && $(matches[0]).text() != $t.text()){
        $('<div>',{'class':'wrapper'}).append(matches)
            .appendTo('body');
        matches = [];
    }
    matches.push(this);
});
if(matches.length > 0){
    $('<div>',{'class':'wrapper'}).append(matches)
        .appendTo('body');
}

上述示例

于 2012-08-06T19:04:42.070 回答
0

我很确定,当您以编程方式将元素添加到 DOM 时 - 元素已完全创建(打开和关闭)。

如果您希望能够创建一个列表并将条目添加到其中 - 使用 appendChild()。

这将允许您在列表中添加条目。

于 2012-08-06T19:08:36.670 回答
-4

http://jsfiddle.net/XH2hp/

//can't form the tag normally, must use html entities.
$('div').append('&lt;p&gt;');//this is a non-closing <p> tag
$('div').append("Hey, I'm some text between two P tags. How does that work?!");
$('div').append('&lt;/p&gt;');//this is the closing </p> tag

//In order for the the DOM to get updated with the proper markup, we must process the HTML entities, .text() will do that for us.
$('div').html($('div').text());
于 2012-08-06T19:05:32.943 回答