1

我在这里做一些奇怪的事情,如果可以,请提供帮助。我有一个带有如下报告的网页:

</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 可能会出现在页面的下一个 ARTICLE X 之后,并且在下一个元素中带有或不带有“nothing found”。只有在“没有找到”存在时才增加计数器的规则应该适用。我的第一个想法是隐藏所有元素,只留下 ARTICLE X 的列表,其中“没有找到”存在于下面的元素中。我这样做了,然后使用以下代码进行计数:

  var n = $("li:contains('Name 1')").length;
  $("span").text("There are " + n)

这在很多层面上都是错误的。首先,它读取仍然包含所有元素的源代码,因为即使它们被隐藏它们仍然存在。它显然还替换了页面上确实存在的所有跨度元素中的文本(我从 .text 描述中获取了跨度),并且我真的不知道如何插入输出,因为我无法控制页面布局。任何想法都受到高度赞赏。谢谢。

4

2 回答 2

3

您可以通过首先选择包含 的元素来获得计数NAME 1,然后检查它们是否具有包含的子元素Nothing found,例如。

$('li:contains("NAME 1")').children('.list:contains("Nothing found")').length;

要在 DOM 中创建和注入元素,请查看此处的文档

你也可以看看这个 fiddle,这是我认为你正在努力实现的一个非常基本的例子。

于 2012-11-07T09:33:29.533 回答
0

如果我理解你,试试这个片段:

var counter = 0;

$('li').each(function(){
     if($(this).html().indexOf('Name 1')> -1)
         if($(this).next('div.list').html() === "Nothing found.")
             {++counter}
});
于 2012-11-07T09:14:24.877 回答