我有一个问题,我想用jQuery解决。在列表中,我想检查两个项目是否具有相同的文本,如果是,我想删除第二个项目。
我不确定该怎么做。
标记很简单,有点像这样
<ul>
<li>Text1</li>
<li>Text2</li>
<li>Text1</li>
<li>Text3</li>
<li>Text3</li>
<li>Text4</li>
<ul>
我无法使用有效/无效课程,因为此列表是动态的,我事先并不知道它将如何填充。
有什么想法吗?
答案 0 :(得分:1)
你可以做到这一点,例如像这样:
var unique = {};
$('li').each(function() {
var txt = $(this).text();
if (unique[txt])
$(this).remove();
else
unique[txt] = true;
});
作为解释:unique
被初始化为对象。虽然each()
会对所有li
个元素进行迭代,但if (unique[txt])
为true
,以防先前true
的{{1}}文本设置为li
目前已处理。在这种情况下,将删除当前li
。如果不是,则unique[txt]
的当前li
文本的unique
设置为true并添加到unique
。由于可能不清楚{ Text1=true, Text2=true, Text3=true, Text4=true }
最终包含的内容:{{1}}
答案 1 :(得分:1)
$。inArray可以使用tmp数组。
$(document).ready(function(){
var tmparr = [];
$('.list li').each(function(i,item){
if($.inArray($(this).text(), tmparr) >= 0){
$(this).remove();
}else{
tmparr.push($(this).text());
}
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="list">
<li>Text1</li>
<li>Text2</li>
<li>Text1</li>
<li>Text3</li>
<li>Text3</li>
<li>Text4</li>
<ul>
&#13;
答案 2 :(得分:0)
您需要迭代li元素并将其文本存储在数组中。如果第i个元素的文本已经在数组中,请跳过它。获得一系列唯一文本字符串后,删除所有li元素并从数组中的信息中生成新元素。
答案 3 :(得分:0)
http://jsfiddle.net/k255o52e/1/
$('ul li').each(function () {
var txt = $(this).text();
// finds all LI that contain the same text
// excludes the first element
var $li = $('li:contains("' + txt + '"):not(:first)');
// and removes the other
$li.remove();
})
<强>更新强>
$('ul li').each(function () {
var txt = $(this).text();
var $li = $('li:contains("' + txt + '"):not(:first)').filter(function(index)
{
return $(this).text() === txt;
});
$li.remove();
})