Javascript 计算有多少ul标签具有特定内容的数量,并仅显示一次
我有一个如下格式的代码。我不想显示两次内容。例如,文本“问题1”在第一个ul标签中重复4次。我希望它使用javascript/jquery显示一次。谢谢Javascript 计算有多少ul标签具有特定内容的数量,并仅显示一次,javascript,jquery,Javascript,Jquery,我有一个如下格式的代码。我不想显示两次内容。例如,文本“问题1”在第一个ul标签中重复4次。我希望它使用javascript/jquery显示一次。谢谢 <h3>Year 2010</h3> <ul> <li><a href="2010/1/2">Issue 2</a></li> <li><a href="2010/1/1">Issue 1</a></li>
<h3>Year 2010</h3>
<ul>
<li><a href="2010/1/2">Issue 2</a></li>
<li><a href="2010/1/1">Issue 1</a></li>
<li><a href="2010/1/2">Issue 2</a></li>
<li><a href="2010/1/1">Issue 1</a></li>
<li><a href="2010/1/1">Issue 1</a></li>
<li><a href="2010/1/1">Issue 1</a></li>
</ul>
<h3>Year 2011</h3>
<ul>
<li><a href="2010/1/2">Issue 2</a></li>
<li><a href="2010/1/1">Issue 1</a></li>
<li><a href="2010/1/2">Issue 2</a></li>
<li><a href="2010/1/2">Issue 2</a></li>
</ul>
2010年
2011年
尝试使用以下方法:
$('ul').each(function(){
var issues = [];
$(this).find('li a').each(function(){
var text = $(this).text();
if($.inArray(text, issues) > -1){
$(this).parent().remove();
}else{
issues.push(text);
}
});
});
它在每个ul
上循环,然后在其中的每个li中循环。它将每个ul
的a
元素的文本存储在一个数组中(问题
)
对于每个li a
,它检查文本是否已添加到数组中(即,它是重复的)。如果有,则删除父级li
,如果没有,则将其添加到数组中
它在这里工作:这是一个本地JavaScript解决方案,用于将节点列表转换为数组和循环(直接在节点列表上使用forEach
似乎有一些问题),然后在节点上使用类似于我们前面看到的方法
Array.prototype.slice.call(document.getElementsByTagName('ul')) // <ul>s to Array
.forEach( // loop over them
function (ul) {
var text = {}; // record what we have seen
Array.prototype.slice.call(ul.childNodes) // <li>s to Array
.forEach( // loop over these
function (li) {
if (li.nodeType !== 1 || li.tagName !== 'LI')
return; // only care about <li>s
if (text[li.textContent])
ul.removeChild(li); // seen it, remove
text[li.textContent] = 1; // mark seen
}
);
}
);
那你为什么要把它放在那里呢?或者是什么生成了html?也许可以看看哪一个适合在选择器上迭代谢谢Joe,这对我来说很有效:)
var ul, li, i, j, text;
ul = document.getElementsByTagName('ul');
for (i = 0; i < ul.length; ++i) { // loop over <ul>
text = {}; // reset seen for each <ul>
li = ul[i].childNodes;
for (j = 0; j < li.length; ++j) { // loop over <ul> children
if (li[j].nodeType === 1 && li[j].tagName === 'LI') { // only <li>
if (text[li[j].textContent]) ul[i].removeChild(li[j]); // remove seen
text[li[j].textContent] = 1; // mark seen
}
}
}