count如果元素包含某些文本并在页面上打印结果

时间:2012-11-07 09:01:37

标签: jquery html

我在这里做了一些奇怪的事情,如果可能的话请求帮助。 我有一个包含报告的网页,如下所示:

</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描述中获取了跨度),并且我真的不知道如何插入输出,因为我无法控制页面布局。 任何想法高度赞赏。谢谢。

2 个答案:

答案 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}
});