我在这里做了一些奇怪的事情,如果可能的话请求帮助。 我有一个包含报告的网页,如下所示:
</p></li><li>ARTICLE 1 (NAME 1)<br /><p>
<div class="list">
Nothing found.
</div>
</p></li><li>ARTICLE 2 (NAME 2)<br /><p>
<div class="list">
<h4 class="sub-heading">Items:</h4>
<li class="item">
...
</li>
<li class="item">
...
</li>
</div>
这在整个页面中重复。第X条始终是唯一的,而名称X在几条条款附近可能是相同的。 p元素由我插入并且可以更改(而css不能)。 div是我无法触及的插件输出。该插件搜索某个数据库并返回“未找到任何内容”或列出找到的项目。 在同一页面上应该有一个表,其中列出了所有可能的名称X,默认情况下每个名称都有0。我想要实现的是计数名称X并且只有在带有文章的p后面的元素中存在“没有找到”时才增加名称附近的计数器。即,在上面的示例中,表格应为
Name 1 1
Name 2 0
可以在下一个文章X之后的页面中找到相同的名称X,并且在下一个元素中有或没有“找不到”。只有在“没有找到”的情况下增加计数器的规则才适用。 我的第一个想法是隐藏所有元素,只留下文章X的列表,其中“找不到任何东西”存在于下面的元素中。我这样做了,然后使用以下代码来计算:
var n = $("li:contains('Name 1')").length;
$("span").text("There are " + n)
这在很多层面都是错误的。首先,它读取仍然包含所有元素的源代码,即使它们被隐藏它们仍然存在。它显然也取代了页面上存在的所有span元素中的文本(我从.text描述中获取了跨度),并且我真的不知道如何插入输出,因为我无法控制页面布局。 任何想法高度赞赏。谢谢。
答案 0 :(得分:3)
您可以首先选择包含NAME 1
的元素,然后检查它们是否包含包含Nothing found
的子元素,例如。
$('li:contains("NAME 1")').children('.list:contains("Nothing found")').length;
要创建元素并将其注入DOM,请查看文档here
你也可以看一下this fiddle,这是我认为你想要实现的一个非常基本的例子。
答案 1 :(得分:0)
如果我了解你,请尝试以下代码:
var counter = 0;
$('li').each(function(){
if($(this).html().indexOf('Name 1')> -1)
if($(this).next('div.list').html() === "Nothing found.")
{++counter}
});