在列表分隔符前添加元素
JQuery append element before list-divider
我正在构建一个基于用户选择的列表(有点像购物清单)的web应用程序。
假设我们已经创建了下面的列表,然后用户想要添加"Grapes"。我想把葡萄放在水果的最后。
<ul data-role="listview" id="listOfThings">
<li data-role="list-divider" id="fruit">Fruit</li>
<li><a href="#" id="apple" class="addBtn">Apple</a></li>
<li><a href="#" id="orange" class="addBtn">Orange</a></li>
<li><a href="#" id="banana" class="addBtn">Banana</a></li>
<li data-role="list-divider">Vegetables</li>
<li><a href="#" id="carrot" class="addBtn">Carrot</a></li>
<li><a href="#" id="celery" class="addBtn">Celery</a></li>
</ul>
我现在的代码只在列表的末尾添加新项,而不是在正确的列表分隔符标题中。
var newItemToAdd = "<li><a href='#' id='grapes' class="addBtn">Grapes</a></li>";
$("#listOfThings .ui-last-child").after($newItemToAdd);
(我只是根据我的实际项目松散地把这些代码放在一起,所以不要研究完整的jQuery代码。我的问题最终归结为:我如何在一个部分的末尾,在下一个列表分隔符之前添加一个新的列表项?
你应该能够使用jquery的before()
:
元素的每个元素之前插入由参数指定的内容匹配元素的集合。
$('.list-divider').before(newItemToAdd);
来源:Jquery的before()
另外,.ui-last-child
是一个类名,没有正确使用psuedo元素。我认为你的意图是ul li:last-child
最后,如果你知道添加一个随机的"分隔器"类,也许你可以简单地添加一个数据属性,指定它是水果(假设data-type="fruit"
),蔬菜,等等。在这种情况下,你可以这样做:
$("[data-type='fruit']:last-child").after($newItemToAdd);
重要的:除此之外,在下一个变量中,您的类名周围有双引号,而您的变量是用双引号定义的。它应该像其他属性一样使用单引号。
目前:
var newItemToAdd = "<li><a href='#' id='grapes' class="addBtn">Grapes</a></li>";
类名应该是:
class='addBtn'
NOT class="addBtn"
根据您需要的新信息,我建议您使用类对列表中的条目类型进行适当的分组(因为<ul>
s没有任何分组<li>
s的方法)。这个想法是将每个"水果"条目标记为类。fruit-item,每个蔬菜条目标记为类。vegetable-item,这样您就可以提出一个选择器。例:$('li.fruit-item:last')
。见下面的新代码:
var newItemToAdd = "<li><a href='#' id='grapes' class='addBtn'>Grapes</a></li>";
$("li.fruit-item:last").after(newItemToAdd);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul data-role="listview" id="listOfThings">
<li data-role="list-divider" id="fruit">Fruit</li>
<li class="fruit-item"><a href="#" id="apple" class="addBtn">Apple</a></li>
<li class="fruit-item"><a href="#" id="orange" class="addBtn">Orange</a></li>
<li class="fruit-item"><a href="#" id="banana" class="addBtn">Banana</a></li>
<li class="list-divider" data-role="list-divider">Vegetables</li>
<li class="vegetable-item"><a href="#" id="carrot" class="addBtn">Carrot</a></li>
<li class="vegetable-item"><a href="#" id="celery" class="addBtn">Celery</a></li>
</ul>
您需要确定新添加的角色应该放置在哪个角色,然后您可以将其添加到该列表
根据您提供的html,您的选择器将不匹配任何内容。在列表分隔符中添加一个类,并执行before()
var newItemToAdd = "<li><a href='#' id='grapes' class='addBtn'>Grapes</a></li>";
$(".list-divider").before(newItemToAdd);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul data-role="listview" id="listOfThings">
<li data-role="list-divider" id="fruit">Fruit</li>
<li><a href="#" id="apple" class="addBtn">Apple</a></li>
<li><a href="#" id="orange" class="addBtn">Orange</a></li>
<li><a href="#" id="banana" class="addBtn">Banana</a></li>
<li class="list-divider" data-role="list-divider">Vegetables</li>
<li><a href="#" id="carrot" class="addBtn">Carrot</a></li>
<li><a href="#" id="celery" class="addBtn">Celery</a></li>
</ul>
或者如果你不想改变html,把上面的javascript改成这样:
$("li[data-role='list-divider']").before(newItemToAdd);
进一步阅读:jQuery .before()
祝你好运!
您可以尝试这样做:
var div = $("[data-role='list-divider']:contains('Vegetables')")[0];
$('<li><a href="#" id="banana" class="addBtn">Users Fruit</a></li>').prependTo(divs);
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 如何使用jquery遍历具有动态添加元素的数组
- jQuery appendTo 替换元素而不是添加元素,如果正在添加的元素预先存在于列表中
- 如何使用jquery添加元素
- 动态添加元素上的 HammerJS
- CSS没有'使用javascript向页面动态添加元素时无法工作
- 使用Javascript在DOM元素中添加元素
- 在添加元素时激发JS事件
- 什么's是在IE8+中添加元素的最有效方法
- d3.js在添加元素时协调
- 使用路由器链接动态添加元素
- 动态添加元素
- 在页面内容完全加载后,使用jQuery在DOM中添加元素
- j查询绑定单击不添加元素
- 在循环 jQuery 上添加元素
- 从一个页面调用 javascript 函数以在第二个页面上添加元素
- 页面加载后向<正文>添加元素时出现问题
- 动态添加元素时刷新 HTML
- 动态添加元素时不触发 JQuery 事件
- 如何使用 JavaScript 获取动态添加元素的宽度