我正在尝试在第二个列表项之后插入一个新的div。但我也希望关闭之前的</ol>
并在其后面打开一个新的<ol>
。
:此:
<ol>
<li>test 1</li>
<li>test 2</li>
<li>test 3</li>
<li>test 4</li>
</ol>
应该成为:
<ol>
<li>test 1</li>
<li>test 2</li>
</ol>
<div>NEW DIV</div>
<ol>
<li>test 3</li>
<li>test 4</li>
</ol>
jQuery的:
var el = $('ol li:eq(1)');
el.after('<div>NEW DIV</div>');
这是我的演示:http://jsfiddle.net/5hhr2/
有没有办法用jQuery做到这一点?
我已经尝试过after('</ol><div>NEW DIV</div><ol>)
,但这显然不起作用,因为这里已经讨论过:Using .after() to add html closing and open tags。
答案 0 :(得分:3)
尝试
var $lis = $('ol li');
$lis.filter(':lt(2)').unwrap().wrapAll('<ol/>').closest('ol').after('<div>NEW DIV</div>');
$lis.filter(':gt(1)').wrapAll('<ol/>');
<强> Fiddle 强>
如果你想链接所有这些:
var $lis = $('ol li');
$lis.filter(':lt(2)') //get all the li's with index less than 2 i.e your number
.unwrap() //unwrap it
.wrapAll('<ol/>') //wrap them in ol
.closest('ol').after('<div>NEW DIV</div>').end().end() //append div next to the ol and go back in the chain to the first list of li's
.filter(':gt(1)') //filter to get remaining items
.wrapAll('<ol/>'); //wrap them all in a new ol
<强> Fiddle 强>
答案 1 :(得分:2)
var $oldOL = $("ol"),
$newOL = $("<div><ol></ol><div>NEW DIV</div><ol></ol></div>");
$newOL.children().eq(0).append($oldOL.children().slice(0, 2)).end().eq(2).append($oldOL.children().slice(0, 2));
$oldOL.replaceWith($newOL.children());
以下是演示:http://jsfiddle.net/5hhr2/9/
我们的想法是创建一组新的列表,在它们之间使用div,并用新的HTML结构替换旧列表。有序列表上的数字现在重新启动,因为有两个<ol />
元素。
答案 2 :(得分:2)
var el = $('ol li');
var elSize = el.length;
var html = '<ol>';
el.each(function(i){
if(i > 0 && i % 2 == 0 && i < elSize) {
html += '</ol><div>NEW DIV</div><ol>';
}
html += '<li>' + $(this).text() + '</li>';
});
html += '</ol>';
$('body').html(html);
答案 3 :(得分:2)
您需要创建两个列表并在它们之间插入新div。这是通过在原始文件之前和之后添加新列表,然后用新div替换原始文件来实现瘦身的众多方法之一:
var list = $('ol'),
newList = $('<ol />'),
items = list.children(),
items1 = items.slice(0,2),
items2 = items.slice(2),
newDiv = $('<div>NEW DIV</div>');
list
.before( newList.clone().append( items1 ) )
.after( newList.clone().append( items2 ))
.replaceWith( newDiv );
或者,甚至更好!创建一个新列表,将其附加到原始列表之后,并将一部分列表项移动到该列表中。然后在原始列表后附加新div。
var list = $('ol'),
newList = $('<ol />'),
items = list.children(),
newDiv = $('<div>NEW DIV</div>');
list.after(
newList.append(
items.slice(2).remove()
))
.after( newDiv );
答案 4 :(得分:0)
试试这个,这将对你有所帮助,这很容易理解,这里我首先使用append方法首先找到列表中的第二项添加div ..
$('ol li').eq(1).append('<div>New Div</div>');
小提琴Here