Jquery 将具有相同值的列表元素转换为具有值的单个元素
这个标题和我的一样愚蠢:) 我不知道这是否可能,但我不得不问。。我在Angularjs中使用ng repeat和JSON,我得到的是一个包含这些值的列表Jquery 将具有相同值的列表元素转换为具有值的单个元素,jquery,angularjs,ng-repeat,Jquery,Angularjs,Ng Repeat,这个标题和我的一样愚蠢:) 我不知道这是否可能,但我不得不问。。我在Angularjs中使用ng repeat和JSON,我得到的是一个包含这些值的列表 <ul> <li class="name">Nokia</li> <li class="name">Nokia</li> <li class="name">Nokia</li> <li class="name"&g
<ul>
<li class="name">Nokia</li>
<li class="name">Nokia</li>
<li class="name">Nokia</li>
<li class="name">ZTE</li>
<li class="name">ZTE</li>
<li class="name">Samsung</li>
<li class="name">Samsung</li>
<li class="name">ZTE</li>
</ul>
一个纯粹而愚蠢的jQuery解决方案:
var names = [];
$("ul li").each(function(){
if($.inArray($(this).text(), names) != -1){
$(this).remove();
}else{
names.push($(this).text());
}
});
您最好在后端使列表唯一,但这取决于数据的创建方式。如果是我的代码,我会在创建任何html元素之前从数据中删除重复项。但是,由于您没有显示任何JavaScript或JSON结构,因此我只能提供一种从html中删除重复项的方法:
var names = {};
$("ul li").filter(function() {
var name = $(this).text();
if (name in names)
return true;
names[name] = true;
return false;
}).remove();
演示:
如果您不确定我使用的jQuery函数是如何工作的,您知道。您也可以使用Angular UI提供的唯一过滤器
<ul>
<li ng-repeat="item in items | unique:attribute">{{ item.attribute }}</li>
</ul>
- {{{item.attribute}
这取决于如何生成第一个列表。如果JSON中存在重复项,则可以对其进行迭代,并创建一个只存储唯一名称的新数组。你应该提供所有相关的代码。当然这是可能的。您可以在创建html元素之前处理数据以删除重复项,也可以创建html元素然后删除重复项。(顺便说一句,如果每个li元素都有相同的类,那么将该类添加到包含ul的元素中会更整洁。)@nnnnnn:当您首先使用AngularJS绑定到HTML时,删除HTML是很奇怪的。如果他只是想要底层模型的不同表示,他应该过滤数据。事实上,我比我更喜欢这个模型的功能方面:-)这正是我要搜索的:)我会编辑这个问题,这样好的人可以看到我的JSON。。。
var names = {};
$("ul li").filter(function() {
var name = $(this).text();
if (name in names)
return true;
names[name] = true;
return false;
}).remove();
<ul>
<li ng-repeat="item in items | unique:attribute">{{ item.attribute }}</li>
</ul>