【发布时间】:2010-11-17 07:07:06
【问题描述】:
我有一个这样的html结构/
<li id="1"></li>
<li id="2"></li>
<li id="3"></li>
<li id="comment-box"></li>
现在我想添加
<li id="4"></li>
在评论框之前。
我正在从评论框中提交一个表单,一旦成功,我就想做前置。
【问题讨论】:
我有一个这样的html结构/
<li id="1"></li>
<li id="2"></li>
<li id="3"></li>
<li id="comment-box"></li>
现在我想添加
<li id="4"></li>
在评论框之前。
我正在从评论框中提交一个表单,一旦成功,我就想做前置。
【问题讨论】:
使用before():
$('#comment-box').before('<li id="4"></li>')
【讨论】:
这不是更有意义吗?:
$('ul#comments_container').prepend('<li id="4"></li>');
或
$('<li id="4"></li>').hide().prependTo('Ul#comments_container').slideDown("slow");
这将允许您将其添加到 ul 列表的开头以将其放在列表的末尾只需使用“追加”而不是“前置”或“追加到”也可以。
【讨论】:
将顺序 id 附加到元素是不常见的,但可能的情况是在匹配元素的未知长度的特定索引处插入。
如果您知道列表中有多少项目,那么您可以使用 nth-child 或 :eq 直接访问该项目,而无需将您的标记类名称或 id 耦合到 jQuery 选择器中。
$('li:nth-child(3)') 选择第三个 <li> 而$('li:eq(3)') 选择第四个,因为 :eq 从零开始。
在你的情况下,我的偏好是以下
$('li:last').prepend('<li>Fourth item</li>');
【讨论】:
如果您严格地想使用 .prepend(),以下内容将帮助您:
// this gives you a list with all matching elements
var elementsList = $("li");
// this refers to an element at required index and wraps it into a jQuery object
var elementAtIndex = $(elementsList[your index]);
// and finally apply change
elementAtIndex.prepend("<li id=\"4\"></li>");
或
同样的,使用.eq(),在你掌握了主要思想之后会更优雅。 .eq 允许您在特定索引处引用。
var elementAtIndex= $("li").eq(your index);
elementAtIndex.prepend("<li id=\"4\"></li>");
最后我们来到了最终的短变体:
$("li").eq(index).prepend("<li id=\"4\"></li>");
【讨论】: